zoukankan      html  css  js  c++  java
  • USACO Beef McNuggets

    洛谷 P2737 [USACO4.1]麦香牛块Beef McNuggets

    https://www.luogu.org/problem/P2737

    JDOJ 1813: Beef McNuggets 麦香牛块

    https://neooj.com/oldoj/problem.php?id=1813

    题目描述

    农夫布朗的奶牛们正在进行斗争,因为它们听说麦当劳正在考虑引进一种新产品:麦香牛块.奶牛们正在想尽一切办法让这种可怕的设想泡汤.奶牛们进行斗争的策略之一是“劣质的包装”.“看,”,奶牛们说,“如果你用只有一次能装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(如果在限定范围内所有购买方案都能得到满足).

    样例输入

    3 3 6 10

    样例输出

    17 
     
    完全背包进阶题型
    代码:
    #include<cstdio>
    #include<algorithm>
    using namespace std;
    int n,ans;
    int m=256*256;
    int dp[100001],a[11];
    int main()
    {
        scanf("%d",&n);
        for(int i=1;i<=n;i++)
            scanf("%d",&a[i]);
        sort(a+1,a+n+1);
        if(a[1]==1)
        {
            printf("0");
            return 0;
        }
        dp[0]=1;
        for(int i=1;i<=n;i++)
            for(int j=a[i];j<=m;j++)
                if(dp[j-a[i]])
                    dp[j]=1;
        for(int i=m;i>=1;i--)
            if(dp[i]==0)
            {
                ans=i;
                break;
            }
        if(ans>m-2*256)
            ans=0;
        printf("%d",ans);
        return 0;
    }
     
  • 相关阅读:
    office文件在线预览,模仿网易邮箱在线预览的
    SQLServer加入域后无法远程连接
    c#将金额转换为大写,支持小数点,原创经典
    GridView多行标题行、改造标题行、自定义标题行完美版
    汇编语言常用指令
    Nature重磅:Hinton、LeCun、Bengio三巨头权威科普深度学习
    微软新技术证明深度学习还能更“深入”
    几个激光的驱动
    rplidar跑cartographer
    Git常用命令速查表
  • 原文地址:https://www.cnblogs.com/fusiwei/p/11243992.html
Copyright © 2011-2022 走看看