博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[USACO4.1]麦香牛块Beef McNuggets 题解报告
阅读量:4970 次
发布时间:2019-06-12

本文共 1386 字,大约阅读时间需要 4 分钟。

题目描述

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

33610
输出样例#1:

17

一个数论定理:

对于自然数p,q,若gcd(p,q)=1,则p*q-p-q是p*x+q*y在x,y>=0的情况下最大取不到的数
【证明略,我是蒟蒻QAQ,网上可以查到】

题解

有个这个定理,我们就可以把范围控制在256*256-2*256内了,然后用做一次背包就好了
若最终结果大于上界或无解,则输出0
【想了很久为什么大于上界无解QAQ,当有大于上界的取不到的数时,说明这些数不互质,那么不是这些数最大公约数的倍数的数肯定构造不出来,故可取无限大】
#include
#include
#include
#include
#define LL long long intusing namespace std;const int maxn=256*256*2,INF=2000000000,P=1000000007;inline int read(){ int out=0,flag=1;char c=getchar(); while(c<48||c>57) {if(c=='-') flag=-1;c=getchar();} while(c>=48&&c<=57){out=out*10+c-48;c=getchar();} return out*flag;}bool dp[maxn];int main(){ dp[0]=true; int N=read(),v; for(int i=1;i<=N;i++){ v=read(); for(int j=v;j
0;i--) if(!dp[i]) {ans=i;break;} if(ans>256*256) ans=0; cout<
<

转载于:https://www.cnblogs.com/Mychael/p/8282882.html

你可能感兴趣的文章
OpenCL
查看>>
iphone ios XCode4如何调试程序忽然崩溃而找不到挂的代码
查看>>
MD5加密文件
查看>>
QT中QPainterPath类的功能和使用方法
查看>>
通过ftp模拟网盘
查看>>
ruby 状态转移
查看>>
在ireport中使用checkbox
查看>>
网站架构之可扩展性
查看>>
content.boundingRectWithSize计算出来的高度不准
查看>>
看过了觉得蛮有用的博客链接
查看>>
C# 注册表Regedit读写
查看>>
cinnamon桌面安装在其他目录下
查看>>
yml在线格式转换工具(properties)
查看>>
题解 【luoguP1967 NOIp提高组2013 货车运输】
查看>>
【Linux开发】CCS远程调试ARM,AM4378
查看>>
Scala的类和对象
查看>>
table相关的选择器 & children()与find()的区别 & 选择器eq(n)与nth-child(n)的差异
查看>>
Windows Azure Platform AppFabric
查看>>
random模块
查看>>
springmvc常用注解标签详解
查看>>