社区讨论
求助,WA最后一个点
P5020[NOIP 2018 提高组] 货币系统参与者 20已保存回复 29
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 29 条
- 当前快照
- 1 份
- 快照标识符
- @mi8671m3
- 此快照首次捕获于
- 2025/11/21 09:17 4 个月前
- 此快照最后确认于
- 2025/11/21 09:59 4 个月前
明显的DP动态规划
80分,求助!
CPP#include<bits/stdc++.h>
using namespace std;
const int MAXN = 200 + 5;
int dp[MAXN][MAXN];
int w[MAXN],s[MAXN],t[MAXN];
// 重量 体积 价值
int n,m,v,he=0;
bool b[MAXN][MAXN][MAXN]={false};//pop[i][j][k]表示第i个物品在j重力k阻力是放不放
inline int read(){
int f = 1, x = 0;
char c = getchar();
while (c < '0' || c > '9')
{
if (c == '-')
f = -1;
c = getchar();
}
while (c >= '0' && c <= '9')
{
x = x * 10 + c - '0';
c = getchar();
}
return f * x;
}
void out(int wei,int sum,int now){
//bool ok = b[now][sum][wei];
if(now == 1){
if(b[now][sum][wei]){
cout<<now<<" ";
}
return;
}
if(b[now][sum][wei]){
out(wei - w[now],sum - s[now],now - 1);
cout<<now<<" ";
}else{
out(wei,sum,now - 1);
}
return;
}
int main(){
m = read(),v = read();
n = read();
for(int i = 1;i <= n; i++){
w[i] = read(),s[i] = read(),t[i] = read();
}
for(int i = 1;i <= n; i++){
for(int j = m;j >= w[i]; j--){
for(int k = v;k >= s[i]; k--){
int num = dp[j - w[i]][k - s[i]] + t[i];
if(dp[j][k] < num){
dp[j][k] = num;
b[i][j][k] = true;
}
}
}
}
cout<<dp[m][v]<<"\n";
out(m,v,n);
return 0;
}
回复
共 29 条回复,欢迎继续交流。
正在加载回复...