• P2737 [USACO4.1]麦香牛块Beef McNuggets(完全背包+数论确定上界)


    题目链接:https://www.luogu.org/problem/show?pid=2737

    题目大意:农夫布朗的奶牛们正在进行斗争,因为它们听说麦当劳正在考虑引进一种新产品:麦香牛块。奶牛们正在想尽一切办法让这种可怕的设想泡汤。奶牛们进行斗争的策略之一是“劣质的包装”。“看,”奶牛们说,“如果你只用一次能装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。

    解题思路:其实这道题就是完全背包判断是否存在填充方案,只是题目给出2,000,000,000的上界让我一时不敢写下去,后来看到有一个定理可以缩小上界,就直接套背包了。总结为以下几点:

          ①存在一个定理:若p,q为自然数,且gcd(p,q)=1,那么px+qy不能表示的最大数为pq-p-q。那么本题中p,q均取决于最大的两个数,不妨取256(方便一点),那么上界为256^2-256*2(跟取p=256,q=255一样的)。

          ②判断当ans超出pq-q-q时,说明不存在不能买到块数的上限,ans=0

          ③状态转移方程:dp[j]=dp[j]+dp[j-a[i]]。

    代码:

     1 #include<iostream>
     2 #include<cstdio>
     3 #include<cstring>
     4 using namespace std;
     5 const int N=1e6+5;
     6 
     7 int a[105];
     8 long long dp[N];
     9 
    10 int main(){
    11     int n;
    12     while(~scanf("%d",&n)){
    13         memset(dp,0,sizeof(dp));
    14         for(int i=1;i<=n;i++){
    15             scanf("%d",&a[i]);
    16         }
    17         dp[0]=1;
    18         for(int i=1;i<=n;i++){
    19             for(int j=0;j<=256*256;j++){
    20                 if(j>=a[i])
    21                     dp[j]+=dp[j-a[i]];
    22             }
    23         }
    24         int ans=0;
    25         for(int i=1;i<=256*256;i++){
    26             if(dp[i]==0)
    27                 ans=i;
    28         }
    29         if(ans>256*256-2*256)
    30             ans=0;
    31         printf("%d
    ",ans);
    32     }
    33     return 0;
    34 }
  • 相关阅读:
    Jmeterif controller 使用
    转载App测试工具大全
    Jmeter 官方在线文档&Android SDK 官方下载地址
    APP自动化之uiautomator2 +python3 UI自动化
    uiautomatorviewer不支持安卓 9.0或以上,提示:"error: obtaining UI hierachy"解决方法
    调查显示:软件开发公司出现“人才荒”
    浅谈Lean UX:我们到底该怎么设计?
    谷歌工程师再次公布Windows漏洞 并称微软很难合作
    灵活运用AppFlood:提高APP eCPM的10个技巧
    Spring Framework 4.0M1发布,支持JDK 8、Java EE 7
  • 原文地址:https://www.cnblogs.com/fu3638/p/7777716.html
Copyright © 2020-2023  润新知