40分求助
查看原帖
40分求助
1268524
DX3906_ourstar楼主2024/7/23 11:08

WA on #4 & #5 & #6 #7 #8 #9

#include<iostream>
#include<cmath>
#include<string.h>
#include<algorithm>
#include<queue>
#define int long long
#define re register
#define zhuang_bi ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
#define INF 0x7fffffff
using namespace std;

const int N = 5e3 + 5;

int n,m; 
int ans;

int mw[N],mv[N];
int fw[N][3],fv[N][3],f[N];

signed main(){
	zhuang_bi
	cin>>n>>m;
	for(re int i = 1;i <= m;i ++){ 
		int v,p,q;
		cin>>v>>p>>q; 
		if(q == 0){
			mw[i] = v;
			mv[i] = v * p;
		}else{
			fw[q][0] ++;
			fw[q][fw[q][0]] = v;
			fv[q][fw[q][0]] = v * p;
		}
	}
	for(re int i = 1;i <= m;i ++){
		for(re int j = n;j >= mw[i];j --){
			f[j] = max(f[j],f[j - mw[i]] + mv[i]);
			if(j >= mw[i] + fw[i][1]){
				f[j] = max(f[j],f[j - mw[i] - fw[i][1]] + mv[i] + fv[i][1]);
			}else if(j >= mw[i] + fw[i][2]){
				f[j] = max(f[j],f[j - mw[i] - fw[i][2]] + mv[i] + fv[i][2]);
			}else if(j >= mw[i] + fw[i][1] + fw[i][2]){
				f[j] = max(f[j],f[j - mw[i] - fw[i][1] - fw[i][2]] + mv[i] + fv[i][1] + fv[i][2]);
			}
		}
	}
	cout<<f[n]<<"\n";
	return 0 ;
}

#4输入:

6000 15
100 3 0
400 5 0
300 5 0
1400 2 3
500 2 2
800 2 3
1400 5 0
300 5 0
1400 3 0
500 2 0
1800 4 0
440 5 10
1340 5 10
430 3 0
500 2 0

#4应输出:

26400

#4实际输出:

24000

所以问题在哪?

2024/7/23 11:08
加载中...