60ptsWA#3#6#7#8#11
查看原帖
60ptsWA#3#6#7#8#11
957105
zzbzwjx楼主2024/9/17 19:55
#include<bits/stdc++.h>
using namespace std;
int n,m,v[66],w[66],f[320002],c[66][6];
//c[0][0]表示主件的数量
//c[i][0]表示主件为i的物品的数量
//c[i][j]表示主件为i的第j个物品的标号
int main(){
	cin>>n>>m;n/=10;
	for(int i=1,q;i<=m;i++){
		cin>>v[i]>>w[i]>>q;
		v[i]/=10;w[i]*=v[i];
		c[q][++c[q][0]]=i;
	}
	for(int i=1;i<=c[0][0];i++){
		int c1=c[0][i],c2=c[c[0][i]][1],c3=c[c[0][i]][2];
		for(int k=n;k>=v[c1];k--){
			int f1=f[k-v[c1]]+w[c1],//仅主件 
			f2=k-v[c1]-v[c2]>=0?f[k-v[c1]-v[c2]]+w[c1]+w[c2]:0,//加附件1
			f3=k-v[c1]-v[c3]>=0?f[k-v[c1]-v[c3]]+w[c1]+w[c3]:0,//加附件2
			f4=k-v[c1]-v[c2]-v[c3]>=0?f[k-v[c1]-v[c2]-v[c3]]+w[c1]+w[c2]+w[c3]:0;//全要 
			f[k]=max(f[k],max(f1,max(f2,max(f3,f4))));
		}
	}
	cout<<f[n]*10;
	return 0;
}

#3输入

4500 12
100 3 0
400 5 0
300 5 0
1400 2 0
500 2 0
800 2 4
1400 5 4
300 5 0
1400 3 8
500 2 0
1800 4 0
440 5 10

正确输出

16700

我的输出

18200
2024/9/17 19:55
加载中...