社区讨论
995...... / 70pts改不了一点,求调
P1064[NOIP 2006 提高组] 金明的预算方案参与者 1已保存回复 0
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 0 条
- 当前快照
- 1 份
- 快照标识符
- @mhj1hztz
- 此快照首次捕获于
- 2025/11/03 19:11 4 个月前
- 此快照最后确认于
- 2025/11/03 19:11 4 个月前
CPP
#include<bits/stdc++.h>
#define max(x,y) (x>y?x:y)
using namespace std;
int const N=3.2e4+5;
int const M=65;
using LL=long long;
struct Things{
LL v,w;
Things operator+(const Things&x)const{
return Things{v+x.v,w+x.w};
}
};
struct Subject{
Things t;
vector<Things>ob;
}sub[N];
LL dp[M][N];
signed main(){
int n,m;
cin>>n>>m;
int cnt_sub=0;
for(int i=1;i<=m;i++){
LL v,w; int p;
cin>>v>>w>>p;
if(!p)sub[++cnt_sub].t=Things{v,v*w};
else sub[p].ob.emplace_back(Things{v,v*w});
}
for(int i=1;i<=cnt_sub;i++){
vector<Things>box;
box.emplace_back(Things{0,0});
if(sub[i].ob.empty())
box.emplace_back(sub[i].t);
else if(sub[i].ob.size()==1){
box.emplace_back(sub[i].t);
box.emplace_back(sub[i].t+sub[i].ob[0]);
}
else{
box.emplace_back(sub[i].t);
box.emplace_back(sub[i].t+sub[i].ob[0]);
box.emplace_back(sub[i].t+sub[i].ob[1]);
box.emplace_back(sub[i].t+sub[i].ob[0]+sub[i].ob[1]);
}
for(Things it:box)
for(int j=n;j>=it.v;j--)
dp[i][j]=max(dp[i-1][j],dp[i-1][j-it.v]+it.w);
}
LL ans=0;
for(int i=1;i<=cnt_sub;i++)
for(int j=0;j<=n;j++)
ans=max(ans,dp[i][j]);
cout<<ans;
return 0;
}
QAQ
回复
共 0 条回复,欢迎继续交流。
正在加载回复...