您的位置:首页 > 其它

完全背包 杭电 1114Piggy-Bank

2014-04-29 10:08 253 查看
题目分析:给出了钱罐开始的重量e和装满后的重量f,然后给你n种硬币,每个价值为p,重量为w,求出最小的价值使钱罐的重量恰好为w

如果不存在 输出This is impossible.

#include<stdio.h>

#include<string.h>

int main()

{

int f[1005],i,j,w[550],p[550],n,m,t,b;

scanf("%d",&t);

while(t--)

{

scanf("%d%d",&b,&m);

m=m-b;

scanf("%d",&n);

for(i=1; i<=n; i++)

{

scanf("%d%d",&p[i],&w[i]);
}

for(i = 1; i <= m; i++)

{

f[i]=2100000000;

}

f[0]=0;

for(i=1; i<=n; i++)

{

for(j=w[i]; j<=m; j++)

{

if(f[j]>f[j-w[i]]+p[i])

f[j]=f[j-w[i]]+p[i];

printf("%d ",f[j]);

}

printf("\n\n\n");

}

if(f[m]==2100000000)

printf("This is impossible.\n");

else

printf("The minimum amount of money in the piggy-bank is %d.\n",f[m]);

}

return 0;

}

//杭电 1114 Piggy-Bank

// 因为初始化为正无穷 f[0]=0;f[j]=正无穷肯定大于f[j-w[i]]+v[i]所以第一个肯定能

//装到最大 如果不能恰好装满的话 f[m]就为正无穷

//第二个如果装进去比不装小的话就装进去

//不能被装满的1种情况w为2,背包为奇数的就不能装满比如背包容量为1
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: