zoukankan      html  css  js  c++  java
  • HDU 1114 完全背包问题

    题意:有一个存钱罐,空罐时的重量是e,满罐时的重量是f,现在有n种硬币,每一种有无限个,现在给出每一种硬币的价值p和重量w,问存钱罐中最少钱,输出最小钱,否则输出...

    思路:变形的完全背包问题,只是求最小值

     1 #include<cstdio>
     2 #include<cstring>
     3 #include<cmath>
     4 #include<iostream>
     5 #include<algorithm>
     6 using namespace std;
     7 const int qq=500+50;
     8 const int MAX=1e5;
     9 int weight[qq],value[qq],dp[MAX];
    10 int main()
    11 {
    12     int t;scanf("%d",&t);
    13     while(t--){
    14         int e,f;scanf("%d %d",&e,&f);//e是空罐的重量 f是满罐时的重量 
    15         int p=f-e;        // p是硬币所占的重量、 
    16         int n;scanf("%d",&n);
    17         for(int i=1;i<=n;++i)
    18             scanf("%d %d",&value[i],&weight[i]);    // 价值、重量
    19         for(int i=1;i<=p;++i)
    20             dp[i]=99999999;            //初始化最大值、 一定要是原数据达不到的值 
    21         dp[0]=0;                // 这里也一定要写出来、不然也会WA 
    22         for(int i=1;i<=n;++i)
    23             for(int j=weight[i];j<=p;++j)
    24                 dp[j]=min(dp[j],dp[j-weight[i]]+value[i]);
    25         if(dp[p]!=99999999)
    26             printf("The minimum amount of money in the piggy-bank is %d.
    ",dp[p]);
    27         else
    28             printf("This is impossible.
    ");
    29     }
    30     return 0;
    31 }

    刚开始没注意dp数组的大小、   不断的TLM  最后发现直接给了自己一巴掌、  多么痛的领悟

    后来又发现e,f范围很大、然而给出的MAX 又不够大、 又是一堆WA、

    一直在强调自己的读题、然而还是出了这么的错误、

    真是一个大写的懵比、

  • 相关阅读:
    easyui里弹窗的两种表现形式
    如何获得 request, "request.getSession(true).setAttribute("a",a);"与“request.setAttribute("a",a);”区别
    JSTL和EL的区别
    windows下安装多个tomcat服务
    谷歌浏览器控制台使用
    递归和迭代有什么区别?
    left join ,right join ,inner join ,cross join 区别
    sql良好习惯
    添加了一个字段,查询速度突然变慢
    热点账户问题-转
  • 原文地址:https://www.cnblogs.com/sasuke-/p/5231552.html
Copyright © 2011-2022 走看看