暑期dp46道(10)HDOJ 2602 Bone Collect 01背包
2016-08-02 21:10
344 查看
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2602
额没啥说的,裸01背包
状态转移方程:
二维:ans[j][v]=max(ans[j-1][v],ans[j-1][v-c[i]]+w[i])
优化空间复杂度后:ans[j]=max(ans[j],ans[j-c[i]]+w[j])
关于背包的讲解我转个链接吧,http://www.cnblogs.com/daoluanxiaozi/archive/2012/05/06/2486105.html还算详细
代码:
#include<cstdio>
#include<cstring>
#include<string>
#define debug 0
#define M(a) memset(a,0,sizeof(a))
#define Max(a,b) ((a>b)?a:b)
const int maxn=1000+5;
int c[maxn],w[maxn];
int n,v,caseNum,ans[maxn];
void Do()
{
for(int i=1;i<=n;i++)
for(int j=v;j>=c[i];j--)//重要,01背包是逆序,因为要依赖ans[j-w[i]](这里是用一维,/<span style="white-space:pre"> </span>//降低了空间复杂度)
{
ans[j]=Max(ans[j],ans[j-c[i]]+w[i]);
}
printf("%d\n",ans[v]);
}
int main()
{
#if debug
freopen("in.txt","r",stdin);
#endif//debug
//char a[10];
while(~scanf("%d",&caseNum))
{
while(caseNum--)
{
M(ans);
scanf("%d%d",&n,&v);
for(int i=1;i<=n;i++)
scanf("%d",&w[i]);
for(int i=1;i<=n;i++)
scanf("%d",&c[i]);
Do();
}
}
return 0;
}
额没啥说的,裸01背包
状态转移方程:
二维:ans[j][v]=max(ans[j-1][v],ans[j-1][v-c[i]]+w[i])
优化空间复杂度后:ans[j]=max(ans[j],ans[j-c[i]]+w[j])
关于背包的讲解我转个链接吧,http://www.cnblogs.com/daoluanxiaozi/archive/2012/05/06/2486105.html还算详细
代码:
#include<cstdio>
#include<cstring>
#include<string>
#define debug 0
#define M(a) memset(a,0,sizeof(a))
#define Max(a,b) ((a>b)?a:b)
const int maxn=1000+5;
int c[maxn],w[maxn];
int n,v,caseNum,ans[maxn];
void Do()
{
for(int i=1;i<=n;i++)
for(int j=v;j>=c[i];j--)//重要,01背包是逆序,因为要依赖ans[j-w[i]](这里是用一维,/<span style="white-space:pre"> </span>//降低了空间复杂度)
{
ans[j]=Max(ans[j],ans[j-c[i]]+w[i]);
}
printf("%d\n",ans[v]);
}
int main()
{
#if debug
freopen("in.txt","r",stdin);
#endif//debug
//char a[10];
while(~scanf("%d",&caseNum))
{
while(caseNum--)
{
M(ans);
scanf("%d%d",&n,&v);
for(int i=1;i<=n;i++)
scanf("%d",&w[i]);
for(int i=1;i<=n;i++)
scanf("%d",&c[i]);
Do();
}
}
return 0;
}
相关文章推荐
- 暑期dp46道(39)--HDOJ 2870 最大子矩阵面积...
- 暑期dp46道(7)--HDOJ1846 Brave Game
- 暑期dp46道(12)--HDOJ 2191 多重背包+二进制优化
- 暑期dp46道(31)--HDOJ 1087 最大上升子序列和 dp(水)
- 暑期dp46道(18)--HDOJ 1024 Max Sum Plus Plus
- 暑期dp46道(32)--hdoj 1171 Big Event in HDU 多重背包:
- 暑期dp46道(21)HDOJ 2059 龟兔赛跑
- 暑期dp46道(41)--HDOJ 1978 How many ways dfs + 记忆化搜索
- 暑期dp46道(23)HDOJ 1059 Dividing 多重背包+二进制优化
- 暑期dp46道(40)--HDOJ 2830 最大子矩阵面积 额
- 暑期dp46道(28) hdoj 1502 Regular Words dp+高精度额
- 暑期dp46道(33)--HDOJ 1176 免费馅饼 类树塔:
- 暑期dp46道(43)--HDOJ 1159 最长公共子序列(可不连续)
- HDOJ(HDU).2602 Bone Collector (DP 01背包)
- 暑期dp46道(24)HDOJ 1074 Doing Homework 状压dp
- HDOJ-2602 Bone Collector [DP-01背包问题]
- hdoj2602 Bone Collector(DP,01背包)
- 暑期dp46道(26)HDOJ 1501 Zipper dfs+记忆化搜索
- 暑期dp46道(44)--HDOJ 1058
- 暑期dp46道(37) HDOJ 2844 COINS