hdu 1114 && poj 1384 Piggy-Bank

来源:互联网 发布:贪心算法 编辑:程序博客网 时间:2024/05/05 02:20

hdu   1114    Piggy-Bank                  题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1114;http://poj.org/problem?id=1384

                    

题目大意:储蓄罐里有一些硬币,硬币重量已知,所有硬币种类(重量、价值)给出,问这堆硬币最少价值是多少。

题目分析:标准的完全背包,略有不同之处是求最少价值。

code:

#include<stdio.h>const int inf=9999999;int min(int a,int b){return a>b?b:a;}int main(){int i,j,t,m,n,c[55000],p[55000],dp[55000];scanf("%d",&t);while(t--){scanf("%d%d",&n,&m);m=m-n;for(dp[0]=0,i=1;i<=m;i++)dp[i]=inf;scanf("%d",&n);for(i=0;i<n;i++){scanf("%d%d",&p[i],&c[i]);for(j=c[i];j<=m;j++) {dp[j]=min(dp[j],dp[j-c[i]]+p[i]);}}if(dp[m]!=inf)printf("The minimum amount of money in the piggy-bank is %d.\n",dp[m]);else printf("This is impossible.\n");}return 0;}

PS:求最少就是初始化成无穷大,装包的时候按小的取(把dp[0]赋0后开始装包)。

PSS:完全背包第二弹,居然是求最少,一开始wrong,看的discuss,受教了……

PSSS:本来打算用2147483647当inf的,不过再交就错了,想到可能是加过了溢出了,只好改成9999999……





0 0
原创粉丝点击