//pku3624
//f[v] 把第i件物品放入容量为v的背包所获得的价值
#include<cstdio>
#include<cstdlib>
#include<cstring>
using namespace std;
int max(int a,int b) {return a>b?a:b;}
int val[3405],c[3405],f[100 * 3500];
int main()
{
int T,N,V,i,j;
scanf("%d%d",&N,&V);
for(i=1;i<=N;i++)
scanf("%d%d",&c[i],&val[i]);
memset(f, 0, sizeof(f));
for(i=1;i<=N;i++)
{
for(j=V;j>=c[i];j--)
{
f[j]=max(f[j],f[j-c[i]]+val[i]);
}
/* for(j=V;j>=0;j--)//观察结果
printf("%d ",f[j]);
printf("\n");
*/
}
printf("%d\n",f[V]);
system("pause");
}
/*
4 6
1 4
2 6
3 12
2 7
*/
//ACM HDU 1114 Piggy-Bank (完全背包问题)
#include<cstdio>
#define INF 0x7ffffff
#define min(a,b) a<b?a:b
int v[505],w[505],dp[10005];
int main()
{
int T,E,F,N,j,i;
scanf("%d",&T);
while(T--)
{
scanf("%d%d%d",&E,&F,&N);
int W=F-E;
for(j=1;j<=W;j++) dp[j]=INF;
dp[0]=0;
for(i=0;i<N;i++)
scanf("%d%d",&v[i],&w[i]);
for(i=0;i<N;i++)
{//填满W,所获得的最少钱数
for(j=w[i];j<=W;j++)//dp[j]表示重量为j时,money的最小值
dp[j]=min(dp[j],dp[j-w[i]]+v[i]);
/* for(j=1;j<=W;j++) //观察结果
printf("%4d ",dp[j]);
printf("\n");
*/
}
if(dp[W]==INF) printf("This is impossible.\n");
else
printf("The minimum amount of money in the piggy-bank is %d.\n",dp[W]);
}
return 0;
}
/*
4
3 13
4
4 5
2 3
5 4
3 2
*/
01 ,完全---背包 理解篇
最新推荐文章于 2022-05-18 11:40:24 发布