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
所以问题在哪?