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、

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

    真是一个大写的懵比、

  • 相关阅读:
    计算机硬件内存双通道只显示一根内存条,不能组成双通道
    VMware 虚拟机安装win10操作系统系列问题解决
    编译语言和解释语言区别
    SPSS 24下载与安装+授权码
    Reg文件操作
    DLL注册表文件相关内容
    安装TensorFlow失败
    Anaconda 包管理与环境管理
    Cookie设置域名问题,cookie跨域
    准备篇(二)C语言
  • 原文地址:https://www.cnblogs.com/sasuke-/p/5231552.html
Copyright © 2011-2022 走看看