Piggy-Bank(完全背包)
题目翻译:
在acm能够做任何事情之前, 必须编制预算并获得必要的财政支持。这一行动的主要收入来自IBM。这个想法其实很简单,每当一些会员有一点小钱时,他就会把所有的硬币都扔到小猪存钱罐里。这个过程是不可逆转的, 除非打破猪,否则硬币不能拿出来。过了足够长的时间, 存钱罐里应该有足够的现金来支付所有需要支付的费用。
但存钱罐存在很大问题:不可能确定里面有多少钱。所以我们可能敲破猪才发现没有足够的钱。显然, 我们要避免这种不愉快的情况,唯一的可能是称重猪,并试图猜测里面有多少枚硬币。假设我们能够准确地确定猪的重量, 而且我们知道给定货币的所有硬币的重量。然后在存钱罐里有一些最低数量的钱, 我们可以保证。你的任务是找出这个最坏的情况, 并确定在存钱罐内的最低现金金额。
大致意思:给你空猪和装满硬币的猪的重量,然后再给你一些硬币数量和它的质量,让你去算实现的最低金额的硬币。注意这道题是必须要刚好装满的,如果装不满就不行。
思路:完全背包,一开始将dp[0]赋值为0,其他dp的值赋为INF(0x3f3f3f3f),dp[j]=min(dp[j],dp[j-c[i]]+w[i])(这个转移方程具体怎么来的,看https://www.cnblogs.com/jbelial/articles/2116074.html),最后去看dp[猪的质量差]是否等于INF,如果等于,那么没有刚好装满,输出题目所给的字符串,如果不等,就输出dp[猪的质量差]。
具体代码如下:
1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 #include<algorithm> 5 using namespace std; 6 const int maxn = 505; 7 const int minn = 10005; 8 const int INF = 0x3f3f3f3f; 9 int c[maxn]; 10 int w[maxn]; 11 int dp[minn]; 12 int main(){ 13 int t; 14 scanf("%d", &t); 15 while(t--){ 16 int E; 17 int F; 18 memset(dp, INF, sizeof dp); 19 dp[0] = 0; 20 scanf("%d%d", &E, &F); 21 int n; 22 scanf("%d", &n); 23 for(int i=1;i<=n;i++){ 24 scanf("%d", &w[i]); 25 scanf("%d", &c[i]); 26 } 27 int v = F - E; 28 for(int i=1;i<=n;i++){ 29 for (int j = c[i]; j <= v;j++){ 30 dp[j] = min(dp[j] , dp[j - c[i]] + w[i]); 31 } 32 } 33 if(dp[v]!=INF) 34 cout << "The minimum amount of money in the piggy-bank is " << dp[v] <<"."<< endl; 35 else { 36 cout << "This is impossible." << endl; 37 } 38 } 39 }
最后祝各位大佬身体健康,ac愉快
1 /**********/**********/**********//**********//**********//**********//**********/ 2 <!-- 3 :: 4 :;J7, :, ::;7: 5 ,ivYi, , ;LLLFS: 6 :iv7Yi :7ri;j5PL 7 ,:ivYLvr ,ivrrirrY2X, 8 :;r@Wwz.7r: :ivu@kexianli. 9 :iL7::,:::iiirii:ii;::::,,irvF7rvvLujL7ur 10 ri::,:,::i:iiiiiii:i:irrv177JX7rYXqZEkvv17 11 ;i:, , ::::iirrririi:i:::iiir2XXvii;L8OGJr71i 12 :,, ,,: ,::ir@mingyi.irii:i:::j1jri7ZBOS7ivv, 13 ,::, ::rv77iiiriii:iii:i::,rvLq@huhao.Li 14 ,, ,, ,:ir7ir::,:::i;ir:::i:i::rSGGYri712: 15 ::: ,v7r:: ::rrv77:, ,, ,:i7rrii:::::, ir7ri7Lri 16 , 2OBBOi,iiir;r:: ,irriiii::,, ,iv7Luur: 17 ,, i78MBBi,:,:::,:, :7FSL: ,iriii:::i::,,:rLqXv:: 18 : iuMMP: :,:::,:ii;2GY7OBB0viiii:i:iii:i:::iJqL;:: 19 , ::::i ,,,,, ::LuBBu BBBBBErii:i:i:i:i:i:i:r77ii 20 , : , ,,:::rruBZ1MBBqi, :,,,:::,::::::iiriri: 21 , ,,,,::::i: @arqiao. ,:,, ,:::ii;i7: 22 :, rjujLYLi ,,:::::,:::::::::,, ,:i,:,,,,,::i:iii 23 :: BBBBBBBBB0, ,,::: , ,:::::: , ,,,, ,,::::::: 24 i, , ,8BMMBBBBBBi ,,:,, ,,, , , , , , :,::ii::i:: 25 : iZMOMOMBBM2::::::::::,,,, ,,,,,,:,,,::::i:irr:i:::, 26 i ,,:;u0MBMOG1L:::i:::::: ,,,::, ,,, ::::::i:i:iirii:i:i: 27 : ,iuUuuXUkFu7i:iii:i:::, :,:,: ::::::::i:i:::::iirr7iiri:: 28 : :rk@Yizero.i:::::, ,:ii:::::::i:::::i::,::::iirrriiiri::, 29 : 5BMBBBBBBSr:,::rv2kuii:::iii::,:i:,, , ,,:,:i@petermu., 30 , :r50EZ8MBBBBGOBBBZP7::::i::,:::::,: :,:,::i;rrririiii:: 31 :jujYY7LS0ujJL7r::,::i::,::::::::::::::iirirrrrrrr:ii: 32 ,: :@kevensun.:,:,,,::::i:i:::::,,::::::iir;ii;7v77;ii;i, 33 ,,, ,,:,::::::i:iiiii:i::::,, ::::iiiir@xingjief.r;7:i, 34 , , ,,,:,,::::::::iiiiiiiiii:,:,:::::::::iiir;ri7vL77rrirri:: 35 :,, , ::::::::i:::i:::i:i::,,,,,:,::i:i:::iir;@Secbone.ii::: 36 37 -- 38 39 40 /**