• 881.麦香牛块


    881. 麦香牛块

    ★  输入文件:nuggets.in  输出文件:nuggets.out  简单对比 时间限制:1 s  内存限制:128 MB


    描述

    农夫布朗的奶牛们正在进行斗争,因为它们听说麦当劳正在考虑引进一种新产品:麦香牛块。奶牛们正在想尽一切办法让这种可怕的设想泡汤。奶牛们进行斗争的策略之一是“劣质的包装”。“看,”奶牛们说,“如果你只用一次能装3块、6块或者10块的三种包装盒包装麦香牛块,你就不可能满足一次只想买1、2、4、5、7、8、11、14或者17块麦香牛块的顾客了。劣质的包装意味着劣质的产品。”

    你的任务是帮助这些奶牛。给出包装盒的种类数N(1<=N<=10)和N个代表不同种类包装盒容纳麦香牛块个数的正整数(1<=i<=256),输出顾客不能用上述包装盒(每种盒子数量无限)买到麦香牛块的最大块数。如果所有购买方案都能得到满足或者不存在不能买到块数的上限,则输出0。不能买到的最大块数(倘它存在)不超过2,000,000,000。

    输入:

    第1行: 包装盒的种类数N

    第2行到N+1行: 每个种类包装盒容纳麦香牛块的个数

    输出

    输出文件只有一行数字:顾客不能用包装盒买到麦香牛块的最大块数或0(如果所有购买方案都能得到满足或者顾客不能买到的块数没有上限)。

     1 #include<iostream>
     2 #include<cstdio>
     3 #include<cmath>
     4 #include<cstring>
     5 #include<algorithm>
     6 
     7 using namespace std;
     8 #define N 70260
     9 
    10 
    11 
    12 int main()
    13 {
    14     freopen("nuggets.in","r",stdin);
    15     freopen("nuggets.out","w",stdout);
    16     int dp[N]={0};
    17     int k[300]={0};
    18     int n;
    19     int a;
    20     cin>>n;
    21     int i,j;
    22     for(i=0;i<n;i++)
    23     {
    24         cin>>k[i];
    25         dp[k[i]]=1;
    26     }
    27     for(i=1;i<=70260;i++)
    28     {
    29         for(j=0;j<n;j++)
    30         {
    31             a=i-k[j];
    32             if(a<0)continue;
    33             if(dp[a]==1){dp[i]=1;break;}
    
    34         }
    35     }
    36     for(i=70000;i>0;i--)
    37         if(dp[i]==0)break;
    38     for(j=70001;j<70257;j++)
    39         if(dp[j]==0)break;
    40     if(j==70257)cout<<i<<endl;
    41     else cout<<0<<endl;
    42     return 0;
    43 }
    View Code

    首先,经过证明如果存在最大的不能买到的块数,则这个块数最大不会超过70000所以建一个长度为70000的DP数组便可以了。 代码解析:

        首先建立一个长度为300的数组S,对包装类型进行存储,然后是变量n表示包装类型的个数,再定义一个变量s表示最多所用的包装个数。然后对种类进行输入,再输入的同时将种类所对应的DP数组下标赋值为1;

    然后从前向后将DP数组扫一遍。

    扫DP数组的方法:

        从第2个元素开始从前向后扫,从满足以下条件的元素中选出值最小的加1存入DP[i]中;

        1、元素总数是下标是i—k[j],j从1到n;

        2、i—k[j]要大于0;

        3、下标i—k[j]所对应的DP数组元素,存储的数据小于s;

        如果不存在这样的数则输出i;如果到最后全部扫完则证明所有元素都能组成;

  • 相关阅读:
    CCD类型介绍:Linear, Interline, FullFrame, FrameTransfer CCD的区别
    电源纹波调试小结
    FPGA调试之特殊管脚
    C#获取指定日期的星期,和sql server中根据指定日期取出来的相对应
    利用TSQL添加作业
    SQL insert失败时也会造成自增长字段加1
    ANSI编码
    分页
    PHP编码转换
    SqlDataReader读取带有输出参数的存储过程
  • 原文地址:https://www.cnblogs.com/zhangchengbing/p/3163674.html
Copyright © 2020-2023  润新知