社区讨论
蒟蒻求助
P1064[NOIP 2006 提高组] 金明的预算方案参与者 2已保存回复 1
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 1 条
- 当前快照
- 1 份
- 快照标识符
- @lo8ardwj
- 此快照首次捕获于
- 2023/10/27 15:33 2 年前
- 此快照最后确认于
- 2023/10/27 15:33 2 年前
CPP
#include<iostream>
using namespace std;
const int N=32001;
int sumv,m,v[N][4],p[N][4],f[N];
int cnt=0;
int sum(int l,int r){
int ans=0;
for(int i=l;i<=r;i++){
ans+=v[cnt][i];
}
return ans;
}
int score(int k){
return v[cnt][k]*p[cnt][k];
}
int main(){
std::ios::sync_with_stdio(false);
cin>>sumv>>m;
for(int i=1;i<=m;i++){
int a,b,q;
cin>>a>>b>>q;
if(q==0){
v[i][0]=a;
p[i][0]=b;
}
else{
if(v[q][1]==0){
v[q][1]=a;
p[q][1]=b;
}
else{
v[q][2]=a;
p[q][2]=b;
}
}
}
for(int i=1;i<=m;i++){
cnt=i;
// cout<<"QWQ"<<cnt<<endl;
for(int j=sumv;j>=0;j--){
if(f[j]>=sum(0,0)){ f[j]=max(f[j],f[j-sum(0,0)]+score(0));/*cout<<"qwq"<<f[j-sum(0,0)]<<" "<<score(0)<<" "<<j<<endl;*/}
if(f[j]>=sum(0,1)){ f[j]=max(f[j],f[j-sum(0,1)]+score(0)+score(1));}
if(f[j]>=sum(0,2)){ f[j]=max(f[j],f[j-sum(0,2)]+score(0)+score(1)+score(2));}
if(f[j]>=v[i][0]+v[i][2]){ f[j]=max(f[j],f[j-v[i][0]-v[i][2]]+score(0)+score(2));}
}
// cout<<sum(0,0)<<" "<<sum(0,1)<<" "<<sum(0,2)<<" "<<v[i][0]+v[i][2]<<endl;
cout<<score(0)<<" "<<score(0)+score(1)<<" "<<score(0)+score(1)+score(2)<<" "<<score(0)+score(2)<<endl;
}
// for(int i=1;i<=sumv;i++) cout<<f[i]<<" ";
cout<<f[sumv];
}
回复
共 1 条回复,欢迎继续交流。
正在加载回复...