hdu--1114--完全背包

cf分要高涨了。。。

这题 就是个裸体啊 只要读懂题意 现在还是喜欢多做些英文的题目...

    touch  me

做这题的时候 突然发现 自己对V的遍历顺序为什么在完全背包是顺序 和在01背包是逆序懂了好多....

  1 #include <iostream>
  2 #include <algorithm>
  3 using namespace std;
  4
  5 const int inf = 0x3f3f3f3f;
  6 const int size = 10010;
  7 const int num = 520;
  8 int dp[size];
  9 int value[num];
 10 int weight[num];
 11
 12 int main()
 13 {
 14     cin.sync_with_stdio(false);
 15     int t , n , m , p;
 16     while( cin >> t )
 17     {
 18         while( t-- )
 19         {
 20             cin >> n >> m;
 21             n = m-n;
 22             cin >> p;
 23             fill( dp , dp+size , -inf );
 24             dp[0] = 0;
 25             for( int i = 0 ; i<p ; i++ )
 26             {
 27                 cin >> value[i] >> weight[i];
 28             }
 29             for( int i = 0 ; i<p ; i++ )
 30             {
 31                 for( int j = weight[i] ; j<=n ; j++ )
 32                 {
 33                        if(dp[j]<0)
 34                        dp[j] = dp[ j-weight[i] ] + value[i];
 35                     else
 36                     {
 37                         if( dp[ j-weight[i] ] + value[i] > 0 )
 38                             dp[j] = min( dp[j] , dp[ j-weight[i] ] + value[i] );
 39                     }
 40                 }
 41             }
 42             if( dp[n]<0 )
 43             {
 44                 cout << "This is impossible." << endl;
 45             }
 46             else
 47             {
 48                 cout << "The minimum amount of money in the piggy-bank is " << dp[n] <<"." << endl;
 49             }
 50         }
 51     }
 52     return 0;
 53 }
 54
 55
 56 #include <iostream>
 57 #include <algorithm>
 58 using namespace std;
 59
 60 const int inf = 0x3f3f3f3f;
 61 const int size = 10010;
 62 const int num = 520;
 63 int dp[size];
 64 int value[num];
 65 int weight[num];
 66
 67 int main()
 68 {
 69     cin.sync_with_stdio(false);
 70     int t , n , m , p;
 71     while( cin >> t )
 72     {
 73         while( t-- )
 74         {
 75             cin >> n >> m;
 76             n = m-n;
 77             cin >> p;
 78             fill( dp , dp+size , inf );
 79             dp[0] = 0;
 80             for( int i = 0 ; i<p ; i++ )
 81             {
 82                 cin >> value[i] >> weight[i];
 83             }
 84             for( int i = 0 ; i<p ; i++ )
 85             {
 86                 for( int j = weight[i] ; j<=n ; j++ )
 87                 {
 88                     dp[j] = min( dp[j] , dp[j-weight[i]]+value[i] );
 89                 }
 90             }
 91             if( dp[n]==inf )
 92             {
 93                 cout << "This is impossible." << endl;
 94             }
 95             else
 96             {
 97                 cout << "The minimum amount of money in the piggy-bank is " << dp[n] <<"." << endl;
 98             }
 99         }
100     }
101     return 0;
102 }

初始化为-oo的是别人写的  觉得蛮不一样的 因为我写了个初始化+oo的

today:

  孤单是一个人的狂欢

  狂欢是一群人的孤单

hdu--1114--完全背包,布布扣,bubuko.com

时间: 2024-10-12 16:56:43

hdu--1114--完全背包的相关文章

HDU 1114 完全背包+判断能否装满

题意 给出一个存钱罐里的钱币重量 给出可能的n种钱币重量以及价值 求存钱罐中钱币的最小价值 若不可能另有输出 在裸的完全背包上加了一点东西 即判断这个背包能否被装满 初始化 dp[0]=0 其余的都使用for循环设置成INF 以达到求min的目的 最后如果dp[v]还是那么大就说明它根本没有通过前面的方式被改变 即 不能被装满 #include<stdio.h> #include<string.h> #include<algorithm> #include<map

HDU 1114 Piggy-Bank(完全背包 DP)

题意  知道空存钱罐的重量和装满钱的存钱罐的重量及每种币值的重量   求存钱罐里至少有多少钱 裸的完全背包  但是是求最小值  所以初始0要变成初始INF  max也要变成min #include<cstdio> #include<cstring> #include<algorithm> using namespace std; const int N = 10005, INF = 0x3f3f3f3f; int val[N], wei[N], d[N]; int ma

F - Piggy-Bank HDU 1114 (完全背包的变形+初始化细节)

F - Piggy-Bank Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u Submit Status Practice HDU 1114 Description Before ACM can do anything, a budget must be prepared and the necessary financial support obtained. The main income for th

HDU 1114 Piggy-Bank(一维背包)

题目地址:HDU 1114 把dp[0]初始化为0,其它的初始化为INF.这样就能保证最后的结果一定是满的,即一定是从0慢慢的加上来的. 代码例如以下: #include <algorithm> #include <iostream> #include <cstring> #include <cstdlib> #include <cstdio> #include <queue> #include <cmath> #incl

hdu 1114 完全背包问题

题意:给定背包体积与物品的体积与价值 求正好放完的最小价值#include<iostream> using namespace std; int min(int a,int b) { if(a<b) return a; return b; } int main() { int t,m1,m2,n,i,j; int v[502],w[502],dp[10005],m; cin>>t; while(t--) { cin>>m1>>m2; m=m2-m1;

[2016-03-27][HDU][1114][Piggy-Bank]

时间:2016-03-27 16:37:56 星期日 题目编号:[2016-03-27][HDU][1114][Piggy-Bank] 遇到的问题:注意f == e的情况,即dp[0] = 0; #include <cstring> #include <cstdio> #include<algorithm> using namespace std; int dp[10000 + 10]; int w[500 + 10],c[500 + 10]; int main(){

hdu 1171 Big Event in HDU(母函数|多重背包)

http://acm.hdu.edu.cn/showproblem.php?pid=1171 题意:有n种物品,给出每种物品的价值和数目,要将这些物品尽可能的分成相等的两份A和B且A>=B ,输出A,B. 母函数可以过,但感觉最直接的方法应该是多重背包. 母函数的话,也是按总价值的一半求,从一半到小枚举,直到找到系数不为0的就是B. #include <stdio.h> #include <iostream> #include <map> #include <

hdu 1114 Piggy-Bank

题目: 链接:点击打开链接 题意: 知道存钱罐的质量和装满硬币的存钱罐的质量,然后是不同硬币的价值和质量,求出存钱罐里钱币的最小价值. 算法: 完全背包问题,银币的个数是不限的. 思路: 状态转移方程:j = 0时,价值为0 dp[j] = min(dp[j],dp[j-w[i]]+v[i]);//表示质量为j的钱币,含有的最小的价值 代码: #include<iostream> #include<cstdio> #include<cstring> using name

HDU 1059 多重背包+二进制优化

Dividing Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 16909    Accepted Submission(s): 4729 Problem Description Marsha and Bill own a collection of marbles. They want to split the collection

HDU Flowers 完全背包

Flowers Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 2709    Accepted Submission(s): 1811 Problem Description As you know, Gardon trid hard for his love-letter, and now he's spending too much