社区讨论

60pts救~~~~

P1064[NOIP 2006 提高组] 金明的预算方案参与者 1已保存回复 0

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
0 条
当前快照
1 份
快照标识符
@mhk6zy8a
此快照首次捕获于
2025/11/04 14:33
4 个月前
此快照最后确认于
2025/11/04 14:33
4 个月前
查看原帖
CPP
#include<bits/stdc++.h>
using namespace std;
const int MAXN=65,MAXM=32e2+5;
int n,m,v[MAXN],w[MAXN],f[MAXN],num[MAXN],dp[MAXM];
int main(){
	scanf("%d%d",&m,&n);
	m/=10;
	int step=1;
	for(int i=1;i<=n;i++){
		scanf("%d%d%d",&v[i],&w[i],&f[i]);
		if(!f[i]){num[i]=step;step++;}
		v[i]/=10;w[i]*=v[i];
	}
	for(int i=1;i<=n;i++)
	    if(!f[i]){
	    	int l1=0,l2=0;
	    	for(int j=1;j<=n;j++) 
	    	    if(f[j]==num[i]){
	    	    	if(!l1&&!l2) l1=j;
	    	    	else l2=j;
				}
	    	for(int j=m;j>=v[i];j--){
	    		dp[j]=max(dp[j],dp[j-v[i]]+w[i]);
				if(j-v[i]-v[l1]>=0) dp[j]=max(dp[j],dp[j-v[i]-v[l1]]+w[i]+w[l1]);
				if(j-v[i]-v[l2]>=0) dp[j]=max(dp[j],dp[j-v[i]-v[l2]]+w[i]+w[l2]);
				if(j-v[i]-v[l1]-v[l2]>=0) dp[j]=max(dp[j],dp[j-v[i]-v[l1]-v[l2]]+w[i]+w[l1]+w[l2]);
			}
		}
	printf("%d",dp[m]*10);
	return 0;
}

回复

0 条回复,欢迎继续交流。

正在加载回复...