首页 > 其他分享 >HDU 1114 Piggy-Bank

HDU 1114 Piggy-Bank

时间:2023-04-20 22:40:27浏览次数:55  
标签:HDU Bank int money amount 1114 bank dp piggy


F - Piggy-Bank


Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u


Submit  Status


Description



Before ACM can do anything, a budget must be prepared and the necessary financial support obtained. The main income for this action comes from Irreversibly Bound Money (IBM). The idea behind is simple. Whenever some ACM member has any small money, he takes all the coins and throws them into a piggy-bank. You know that this process is irreversible, the coins cannot be removed without breaking the pig. After a sufficiently long time, there should be enough cash in the piggy-bank to pay everything that needs to be paid. 

But there is a big problem with piggy-banks. It is not possible to determine how much money is inside. So we might break the pig into pieces only to find out that there is not enough money. Clearly, we want to avoid this unpleasant situation. The only possibility is to weigh the piggy-bank and try to guess how many coins are inside. Assume that we are able to determine the weight of the pig exactly and that we know the weights of all coins of a given currency. Then there is some minimum amount of money in the piggy-bank that we can guarantee. Your task is to find out this worst case and determine the minimum amount of cash inside the piggy-bank. We need your help. No more prematurely broken pigs! 



 



Input



The input consists of T test cases. The number of them (T) is given on the first line of the input file. Each test case begins with a line containing two integers E and F. They indicate the weight of an empty pig and of the pig filled with coins. Both weights are given in grams. No pig will weigh more than 10 kg, that means 1 <= E <= F <= 10000. On the second line of each test case, there is an integer number N (1 <= N <= 500) that gives the number of various coins used in the given currency. Following this are exactly N lines, each specifying one coin type. These lines contain two integers each, Pand W (1 <= P <= 50000, 1 <= W <=10000). P is the value of the coin in monetary units, W is it's weight in grams. 



 



Output



Print exactly one line of output for each test case. The line must contain the sentence "The minimum amount of money in the piggy-bank is X." where X is the minimum amount of money that can be achieved using coins with the given total weight. If the weight cannot be reached exactly, print a line "This is impossible.". 



 



Sample Input



3 10 110 2 1 1 30 50 10 110 2 1 1 50 30 1 6 2 10 3 20 4



 



Sample Output



The minimum amount of money in the piggy-bank is 60. The minimum amount of money in the piggy-bank is 100. This is impossible.



 





#include<stdio.h> 
    
 #include<string.h> 
    
 #include<stdlib.h> 
    


 #define min -2000000000 
    


 int dp[10002]; 
    
 int p[10002]; 
    
 int w[10002]; 
    


 int min_(int a,int b) 
    
 { 
    
     return a>b?b:a; 
    
 } 
    


 int main() 
    
 { 
    
     int T,i,j,n,m,t; 
    
     scanf("%d",&T); 
    
     while(T--) 
    
     { 
    
         int kk = 0; 
    
         scanf("%d%d",&n,&m); 
    
         scanf("%d",&t); 
    
         int pp,qq; 
    
         for(i=1;i<=t;i++) 
    
         { 
    
             scanf("%d%d",&w[i],&p[i]); 
    
         } 
    
         kk = m - n; 
    
         for(i=1;i<=kk;i++) 
    
         { 
    
             dp[i] = min; 
    
         } 
    
         dp[0] = 0; 
    
         for(i=1;i<=t;i++) 
    
         { 
    
             for(j=p[i];j<=kk;j++) 
    
             { 
    
                 if (dp[j]<0) 
    
                 { 
    
                     dp[j]=dp[j-p[i]]+w[i]; 
    
                 } 
    
                 else 
    
                 { 
    
                     if (dp[j-p[i]]+w[i]>0) 
    
                     { 
    
                         dp[j]=min_(dp[j],dp[j-p[i]]+w[i]); 
    
                     } 
    
                 } 
    
             } 
    
         } 
    
         if(dp[kk]>0) 
    
         { 
    
             printf("The minimum amount of money in the piggy-bank is %d.\n",dp[kk]); 
    


         } 
    
         else 
    
         { 
    
             printf("This is impossible.\n"); 
    
         } 
    
     } 
    
     return 0; 
    
 } 
    


 F 
    
 第二种AC 
    
 #include<stdio.h> 
    
 #include<string.h> 
    
 #include<stdlib.h> 
    


 #define N 999999 
    
 #define Q 10002 
    


 int dp[Q],p[Q],w[Q]; 
    


 int main() 
    
 { 
    
     int T,i,j; 
    
     int t,n,m; 
    
     scanf("%d",&T); 
    
     while(T--) 
    
     { 
    
         scanf("%d%d",&n,&m); 
    
         m = m - n; 
    
         scanf("%d",&t); 
    
         for(i=1;i<=t;i++) 
    
         { 
    
             scanf("%d%d",&w[i],&p[i]); 
    
         } 
    
         for(i=1;i<=m;i++) 
    
         { 
    
             dp[i] = N; 
    
         } 
    
         dp[0] = 0; 
    
         for(i=1;i<=t;i++) 
    
         { 
    
             for(j=p[i];j<=m;j++) 
    
             { 
    
                 if(dp[j]>(dp[j-p[i]]+w[i])) 
    
                 { 
    
                     dp[j] = dp[j-p[i]]+w[i]; 
    
                 } 
    
             } 
    
         } 
    
         if(dp[m] == N) 
    
         { 
    
             printf("This is impossible.\n"); 
    
         } 
    
         else 
    
         { 
    
             printf("The minimum amount of money in the piggy-bank is %d.\n",dp[m]); 
    
         } 
    
     } 
    
     return 0; 
    
 }

标签:HDU,Bank,int,money,amount,1114,bank,dp,piggy
From: https://blog.51cto.com/u_14834528/6210800

相关文章

  • HDU 1869 六度分离
    六度分离TimeLimit:1000MS     MemoryLimit:32768KB     64bitIOFormat:%I64d&%I64uSubmit Status Practice HDU1869Description1967年,美国著名的社会学家斯坦利・米尔格兰姆提出了一个名为“小世界现象(smallworldphenom......
  • HDU 1527 取石子游戏(博弈论)
    取石子游戏TimeLimit:2000/1000MS(Java/Others)    MemoryLimit:65536/32768K(Java/Others)TotalSubmission(s):3717    AcceptedSubmission(s):1868ProblemDescription有两堆石子,数量任意,可以不同。游戏开始由两个人轮流取石子。游戏规定,每次有......
  • PAT Basic 1114. 全素日
    PATBasic1114.全素日1.题目描述:以上图片来自新浪微博,展示了一个非常酷的“全素日”:2019年5月23日。即不仅20190523本身是个素数,它的任何以末尾数字3结尾的子串都是素数。本题就请你写个程序判断一个给定日期是否是“全素日”。2.输入格式:输入按照 yyyymmdd 的格式给......
  • kuangbin专题一 简单搜索 石油储备(HDU-1241)
    OilDepositsTimeLimit:2000/1000MS(Java/Others)MemoryLimit:65536/32768K(Java/Others)ProblemDescriptionTheGeoSurvCompgeologicsurveycompanyisresponsiblefordetectingundergroundoildeposits.GeoSurvCompworkswithonelargerectangula......
  • HDU 1042 N! (大整数阶乘)
    这道题开始并不会,是看了别人的代码,自己又改造了一下,代码如下:(PS:这个时候自带大整数运算的java就有优势了)#include<bits/stdc++.h>usingnamespacestd;constintN=20000+10;intans[N];voidfact(intn){ans[0]=ans[1]=1;inttot=1;for(inti=......
  • HDU 1253 胜利大逃亡
    题目有个坑是可能没有到达门口的路,结果WA好几次#include<iostream>#include<cstdio>#include<queue>#include<algorithm>usingnamespacestd;constintINF=10000000;inta,b,c,d;ints[60][60][60],cost[60][60][60];intdx[]={0,0,1,-1,0,0}......
  • hdu 1272 小希的迷宫
    这是我第一次用并查集解决问题,其实刷这道题就是为了学习并查集,这是学长在hdu上找的模板题#include<iostream>#include<cstdio>usingnamespacestd;constintN=110000;intpar[N],mark[N];intfind1(intx){intr=x;while(par[r]!=r)r=par[r];......
  • HDU 5443 The Water Problem RMQ
    题目:http://acm.hdu.edu.cn/showproblem.php?pid=5443题意:给定一个数组,查询区间最大值思路:RMQ模板题#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>#include<cmath>#include<queue>usingnamespacestd;constint......
  • HDU 2894 DeBruijin (欧拉回路)
    题目地址:HDU2894跟POJ1392基本一样的。。代码如下:#include<iostream>#include<string.h>#include<math.h>#include<queue>#include<algorithm>#include<stdlib.h>#include<map>#include<set>#include<stdio.h>......
  • HDU 1116 && POJ 1386 Play on Words(欧拉路径)
    按字母来建边,每个单词的首字母和尾字母加边。先判断是否连通,然后判断每个字母的入度和出度不能出现差的绝对值大于2,然后入度和出度差的绝对值为1的不能超过两个。就可以形成欧拉路径代码如下:#include<iostream>#include<string.h>#include<math.h>#include<queue>#include......