社区讨论
求助
P2871[USACO07DEC] Charm Bracelet S参与者 2已保存回复 1
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 1 条
- 当前快照
- 1 份
- 快照标识符
- @lo86i16k
- 此快照首次捕获于
- 2023/10/27 13:34 2 年前
- 此快照最后确认于
- 2023/10/27 13:34 2 年前
本蒟蒻不会填表dp,只会扫缓存法,有大佬能教教我填表dp怎么写吗
扫缓存代码(80pts):
CPP#include<bits/stdc++.h>
using namespace std;
int n,bag,w[4010],v[4010],dp[3403][9100];
int lbag(int index, int bag)
{
if(dp[index][bag] != -1)
return dp[index][bag];
int ans = 0;
if (bag < 0)
{
ans = 0;
}
else
if(index == n+1)
{
ans = 0;
}
else
{
int p2=0;
int p1=lbag(index+1,bag);
if(bag-w[index]>=0)
p2=v[index]+lbag(index+1,bag-w[index]);
ans = max(p1, p2);
}
dp[index][bag] = ans;
return ans;
}
int rn()
{
if(n==0)
return 0;
if(bag<0)
return 0;
return lbag(1,bag);
}
int main()
{
memset(dp,-1,sizeof(dp));
cin>>n>>bag;
for(int i=1;i<=n;i++)
{
cin>>w[i]>>v[i];
}
cout << rn();
return 0;
}
回复
共 1 条回复,欢迎继续交流。
正在加载回复...