zoukankan      html  css  js  c++  java
  • HDU 1085 Holding Bin-Laden Captive!(DP)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1085

    解题报告:有1,2,5三种面值的硬币,这三种硬币的数量分别是num_1,num_2,num_5,问你不能凑的钱的最小值是多少。

    DP,开一个这样的数组dp[i][3],然后dp[i][0]表示凑成 i 元钱需要dp[i][0]张1块的,需要dp[i][1]张两块的,dp[i][2]张5块的,然后依次往后递推,得到 i 的途径一共有三种,第一种是i-1加一张一块的,第二种是i-2加上1张两块的,第四种是i-5加上一张5块的,然后每次判断一下有没有超过张数就行了,如果发现这三种途径都不能凑成i,那么说明最小的不能凑的值就是i.

     1 #include<cstdio>
     2 
     3 struct node
     4 {
     5     int a,b,c;
     6 }dp[8005];
     7 int main()
     8 {
     9     int n1,n2,n5;
    10     while(scanf("%d%d%d",&n1,&n2,&n5),n1+n2+n5)
    11     {
    12         dp[0].a = 0;
    13         dp[0].b = 0;
    14         dp[0].c = 0;
    15         int ans = 0;
    16         for(int i = 1;i <= n1 + 2*n2+5*n5+1;++i)   //加1是在所有的都能实现的情况下可以直接得到比总数大1的结果 
    17         {
    18             if(i >= 1 && dp[i-1].a+1 <= n1)
    19             dp[i] = dp[i-1],dp[i].a += 1;
    20             else if(i >= 2 && dp[i-2].b+1 <= n2)
    21             dp[i] = dp[i-2],dp[i].b += 1;
    22             else if(i >=5 && dp[i-5].c+1 <= n5)
    23             dp[i] = dp[i-5],dp[i].c += 1;
    24             else
    25             {
    26                 ans = i;
    27                 break;
    28             }
    29         }
    30         printf("%d
    ",ans);
    31     }
    32     return 0;
    33 }
    34         
    35         
    View Code
  • 相关阅读:
    FastAdmin CMS 插件下载
    使用 Python 连接到 PADS Layout
    Javascript undefined 和 null
    反馈给又拍云需要以下信息
    Web前端性能优化之图片优化
    nodejs--实现跨域抓取数据
    HTML6 展望
    cSS3 伪类:nth-child 的使用方法
    css3中的几何图形shape研究
    iScroll5 API速查随记
  • 原文地址:https://www.cnblogs.com/xiaxiaosheng/p/3940699.html
Copyright © 2011-2022 走看看