社区讨论
11点超空间 求dalao帮帮
P2925[USACO08DEC] Hay For Sale S参与者 3已保存回复 4
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 4 条
- 当前快照
- 1 份
- 快照标识符
- @lo85q4e4
- 此快照首次捕获于
- 2023/10/27 13:12 2 年前
- 此快照最后确认于
- 2023/10/27 13:12 2 年前
CPP
#include<bits/stdc++.h>
using namespace std;
long long bag, n, w[10010], dp[5100][50000];
int lbag(int index, int bag)
{
if(dp[index][bag] != -1)
return dp[index][bag];
int ans = 0;
if(bag < 0)
ans = -1;
else
if(index == n + 1)
ans = 0;
else{
int p1 = lbag(index + 1, bag);
int p2 = 0;
int next = lbag(index + 1, bag - w[index]);
if(next != -1)
p2 = w[index] + next;
ans = max(p1, p2);
}
dp[index][bag] = ans;
return ans;
}
long long tb()
{
for(int index = n;index >= 1;index--)
{
for(int rest = 0;rest <= bag;rest++)
{
long long p1 = dp[index + 1][rest];
long long p2 = 0;
if(rest - w[index] >= 0 && w[index] + dp[index + 1][rest - w[index]] <= bag)
p2 = w[index] + dp[index + 1][rest - w[index]];
dp[index][rest] = max(p1, p2);
if(dp[index][rest] == bag)
return dp[index][rest];
}
}
return dp[1][bag];
}
int main()
{
// memset (dp, -1, sizeof (dp));
cin >> bag >> n;
for(int i = 1;i <= n;i ++)
cin >> w[i];
// cout << lbag(1, bag) << endl;
// memset (dp, 0, sizeof (dp));
long long sum = tb();
cout << sum;
return 0;
}
回复
共 4 条回复,欢迎继续交流。
正在加载回复...