社区讨论

上一个就别管了,20分求助

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

讨论操作

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

当前回复
2 条
当前快照
1 份
快照标识符
@mi6x1vyo
此快照首次捕获于
2025/11/20 12:13
4 个月前
此快照最后确认于
2025/11/20 12:13
4 个月前
查看原帖
CPP
#include <iostream>
#include <cstdio>
#include <cmath>
using namespace std;
int w[100],c[100],fw[100][3],fc[100][3],n,v,a,b,p,f[100000],ans;
int main(){
	cin>>v>>n;
	for(int i=1;i<=n;i++){
		cin>>a>>b>>p;
		b*=a;
		if (!p){
			w[++w[0]]=a;
			c[w[0]]=b;
		}
		else{
			fw[p][++fw[p][0]]=a;
			fc[p][++fc[p][0]]=b;	
		}
	}
	for (int i=1;i<=w[0];i++)
	{
		cout<<w[i]<<' '<<c[i]<<' '
			<<fw[i][1]<<' '<<fc[i][1]<<' '
		    <<fw[i][2]<<' '<<fc[i][2]<<endl;
	}
	for (int i=1;i<=w[0];i++){
		for (int j=v;j>=w[i];j--){
			f[j]=max(f[j],f[j-w[i]]+c[i]);
			if (w[i]+fw[i][1]<j)
			f[j]=max(f[j],f[j-w[i]-fw[i][1]]+c[i]+fc[i][1]);
			if (w[i]+fw[i][2]<j)
			f[j]=max(f[j],f[j-w[i]-fw[i][2]]+c[i]+fc[i][2]);
			if (w[i]+fw[i][1]+fw[i][2]<j)
			f[j]=max(f[j],f[j-w[i]-fw[i][2]-fw[i][2]]+c[i]+fc[i][1]+fc[i][2]);
		}
	}
	cout<<f[v];
} 

回复

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

正在加载回复...