[Usaco]麦香牛块
2017-12-03 18:51
176 查看
说实话,我也不知道这道题我到底对不对,反正各个网站的数据都过了,但是还是有些虚。
我们首先知道,对于a,b两个数,设d=gcd(a,b),那么对于任意c>=ab且d|c,一定存在正整数x,y,使得ax+by=c成立。
对于这道题,我们先考虑无限的情况,我目前就想到一种,这n个数的最大公因数为d不为1,那么它们对于非d的倍数都无法构成。
再根据今年noipd1td1得(233),最大的应该不超过最大数的平方。至于证明。。。不知道,所以不确定呀。
这样,最大只到256*256,n最大为10,那么简单dp就好了。
我们首先知道,对于a,b两个数,设d=gcd(a,b),那么对于任意c>=ab且d|c,一定存在正整数x,y,使得ax+by=c成立。
对于这道题,我们先考虑无限的情况,我目前就想到一种,这n个数的最大公因数为d不为1,那么它们对于非d的倍数都无法构成。
再根据今年noipd1td1得(233),最大的应该不超过最大数的平方。至于证明。。。不知道,所以不确定呀。
这样,最大只到256*256,n最大为10,那么简单dp就好了。
#include<bits/stdc++.h> #define N 250000 using namespace std; int n,mx,tmp; int A[15]; bool f[N+500]; int gcd(int a,int b) { return b==0?a:gcd(b,a%b); } int main() { freopen("in.txt","r",stdin); cin>>n;f[0]=true; for(int i=1;i<=n;i++)cin>>A[i]; tmp=A[1];for(int i=2;i<=n;i++)tmp=gcd(tmp,A[i]); if(tmp!=1)return cout<<0,0; for(int i=1;i<=n;i++) for(int j=0;j<=N;j++) if(f[j])f[j+A[i]]=true; for(int i=N;i>=0;i--) if(!f[i])return cout<<i,0; cout<<0; return 0; }
相关文章推荐
- [USACO4.1]麦香牛块Beef McNuggets
- 【USACO4.1.1】麦香牛块
- P2737 [USACO4.1]麦香牛块Beef McNuggets 数学题 + 放缩思想
- usaco training 4.1.1 麦香牛块 题解
- USACO 虫洞
- USACO 1.4 The clocks
- USACO4.3.3 Letter Game (lgame)
- [USACO4.1]麦香牛块Beef McNuggets
- USACO 2.1 Hamming Codes
- [USACO]金发姑娘和N头牛 解题报告
- P2115 [USACO14MAR]破坏Sabotage
- USACO 1.1-Friday the Thirteenth
- 1634: [Usaco2007 Jan]Protecting the Flowers 护花
- 【BZOJ】 1610 [Usaco2008 Feb]Line连线游戏 计算几何
- USACO :Zero Sum解题报告
- 1635: [Usaco2007 Jan]Tallest Cow 最高的牛
- 【USACO 5.3.1】量取牛奶 迭代
- USACO 3.1 humble numbers
- 【乱搞】USACO-cha1-sec1.3 Preface Numbering
- [Usaco2005 Feb]Feed Accounting 饲料计算