昨天晚上写的一题 结果USACO一直挂中 今天交了下

有一点点的数论知识  背包很好想 就是不好确定上界

官方题解:

这是一个背包问题。一般使用动态规划求解。

一种具体的实现是:用一个线性表储存所有的节点是否可以相加得到的状态,然后每次可以通过一个可以相加得到的节点,通过加上一个输入的数求出新的可以相加得到的点。复杂度是O(N×结果)。

但是可以证明结果不会超过最大的两个数的最小公倍数(如果有的话)。参见数论。所以复杂度也是O(Na2),完全可以接受了。

判断无限解可以按上面的方法,另外也可以算所有的数的最大公约数。如果不是1,也就是说这些数不互质,那么不被这个最大公约数整除的数一定构造不出来。当且仅当这种情况会有无限解。另外有一种不需要任何数论知识的方法是判断是不是按照每个输入的数的循环节循环,如果是的话,继续算显然不会有任何结果。

判断有没有更大的解也可以按这种方法,另外如果连续最小的数那么多个数都可以构成,也不会有更大的符合条件的解。

通过位压缩可以使程序在32位机上的运行速度快32倍(由于程序代码会变长,也可能是16倍或者更小的倍数)。这样可以相当快的解决这个问题。不过复杂度还是O(Na2)。

“可以证明结果不会超过最大的两个数的最小公倍数”。我来证明一下。

已知,不定方程 ax + by = c ( a , b > 0 且 c >= ab )存在一组整数解( x0 , y0 ) (斐蜀定理)
求证,该不定方程存在一组非负整数解 ( xn , yn ) .
证明 : 由不定方程通解式得 : xn = x0 + b * t , yn = y0 - a * t ( t 是整数 )
令 xn , yn >= 0 解出 - ( x0 / b ) <= t <= ( y0 / a )
因为 c >= a * b 即 a * x0 + b * y0 >= a * b 两边同除 a * b 得 :
y0 / a - ( - x0 / b ) >= 1
所以一定存在 整数t使得 - ( x0 / b ) <= t <= ( y0 / a ) .
所以方程一定有非负整数解. 证毕.

特殊情况

  1. 无解的情况:很显然,只有输入的N个数里有1的情况才会无解,否则1本身就是一个解,因为没办法由更大的数相加得到。
  2. 无限个解的情况,见上面的#问题分析

对于这道题目,这两种情况都应该输出0

注:如果有两个连续的数x,x+1 在序列中的话,那(x-1)*x以后的数都能通过这两个相加得到。所以如果(x-1)*x前无解,则无解!

 /*
ID: shangca2
LANG: C++
TASK: nuggets
*/ #include <iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<stdlib.h>
using namespace std;
#define N 70000
int dp[];
int a[];
int gcd(int a,int b)
{
return b==?a:(gcd(b,a%b));
}
int main()
{
freopen("nuggets.in","r",stdin);
freopen("nuggets.out","w",stdout);
int i,j,n,y;
cin>>n;
for(i = ; i <= n ; i++)
cin>>a[i];
y = a[];
if(n==)
{
printf("0\n");
return ;
}
for(i = ; i <= n ; i++)
{
y = gcd(y,a[i]);
}
if(y!=)
{
puts("");
return ;
}
int v = N;
dp[] = ;
for(j = ; j <= n ; j++)
for(i = a[j] ; i <= v ; i++)
{
dp[i] = max(dp[i],dp[i-a[j]]);
}
for(i = v ; i>= ; i--)
{
if(dp[i]==)
break;
}
if(i==)
cout<<"0\n";
else
cout<<i<<endl;
return ;
}

USACO4.12Beef McNuggets(背包+数论)的更多相关文章

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

    题目链接:https://www.luogu.org/problem/show?pid=2737 题目大意:农夫布朗的奶牛们正在进行斗争,因为它们听说麦当劳正在考虑引进一种新产品:麦香牛块.奶牛们正在 ...

  2. 洛谷 P2737 [USACO4.1]麦香牛块Beef McNuggets Label:一点点数论 && 背包

    题目描述 农夫布朗的奶牛们正在进行斗争,因为它们听说麦当劳正在考虑引进一种新产品:麦香牛块.奶牛们正在想尽一切办法让这种可怕的设想泡汤.奶牛们进行斗争的策略之一是“劣质的包装”.“看,”奶牛们说,“如 ...

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

    P2737 [USACO4.1]麦香牛块Beef McNuggets 13通过 21提交 题目提供者该用户不存在 标签USACO 难度普及+/提高 提交  讨论  题解 最新讨论 暂时没有讨论 题目描 ...

  4. [HAOI2018]奇怪的背包 (DP,数论)

    [HAOI2018]奇怪的背包 \(solution:\) 首先,这一道题目的描述很像完全背包,但它所说的背包总重量是在模P意义下的,所以肯定会用到数论.我们先分析一下,每一个物品可以放无数次,可以达 ...

  5. [USACO4.1]麦香牛块Beef McNuggets 题解报告

    题目描述 农夫布朗的奶牛们正在进行斗争,因为它们听说麦当劳正在考虑引进一种新产品:麦香牛块.奶牛们正在想尽一切办法让这种可怕的设想泡汤.奶牛们进行斗争的策略之一是"劣质的包装".& ...

  6. BZOJ5302 [HAOI2018]奇怪的背包 【数论 + dp】

    题目 小 CC 非常擅长背包问题,他有一个奇怪的背包,这个背包有一个参数 PP ,当他 向这个背包内放入若干个物品后,背包的重量是物品总体积对 PP 取模后的结果. 现在小 CC 有 nn 种体积不同 ...

  7. USACO4.1 Beef McNuggets【数学/结论】

    吐槽/心路历程 打开这道题的时候:*&@#%*#?!这不是小凯的疑惑吗?好像还是个加强版的?我疑惑了.原来$USACO$才是真的强,不知道什么时候随随便便就押中了题目. 对于我这种蒟蒻来说,这 ...

  8. [USACO4.1]麦香牛块Beef McNuggets

    https://www.luogu.org/problemnew/show/P2737 给出n个数ai,求这n个数不能累加出的最大的数 最大的数无限大或能凑出所有的自然数则输出0 n<=10,a ...

  9. 洛谷P4495 奇怪的背包 [HAOI2018] 数论

    正解:数论+dp 解题报告: 传送门! 首先看到这题,跳无数次,自然而然可以想到之前考过好几次了的一个结论——如果只考虑无限放置i,它可以且仅可以跳到gcd(p,v[i]) 举一反三一下,如果有多个i ...

随机推荐

  1. ubuntu lua安装

    #解压 tar -xzvf lua5.2.2.tar.gz #进入lua5.2.2文件夹 cd lua5.2.2 #执行make sudo make linux #提示如下错误: #lua.c:67: ...

  2. HTML5新增标签属性

    ----- 新类型表单 - email 自动校验输入的是不否是email 邮箱:<input type="email" name="user_email" ...

  3. Winform窗口弹出位置控制

    窗体的弹出位置可以由属性StartPosition来指定,默认值有: Manural 自定义,由属性Location指定: CenterScreen 屏幕中央: WindowsDefaultBound ...

  4. rpm方式安装gcc缺少依赖项的解决方法

    使用rpm方式安装gcc时,有时会报缺少依赖项: libmpfr.so.1 is needed by cpp-4.4.4-13.el6.i686 libppl.so.7 is needed by cl ...

  5. Win2008 R2 IIS7.5+PHP5(FastCGI)+MySQL5环境搭建教程

    现在很多朋友想尝试win2008 r2来跑web服务器,跟win2003相比界面差别有点大,有些人可能不太习惯,不过以后是趋势啊,这里简单分享下,方便需要的朋友 准备篇 一.环境说明: 操作系统:Wi ...

  6. hdu 5626 Clarke and points 数学推理

    Clarke and points Problem Description   The Manhattan Distance between point A(XA,YA) and B(XB,YB) i ...

  7. Visual Studio 2010 旗舰版安装图解

    微软发布了最新的 Visual Studio 2010 软件开发编程平台及 .Net Framework 4 框架.这次 VisualStudio 2010 包括 Professional 专业版.P ...

  8. RAC,客户端连接失败ORA-12514

    今天上午,某项目运维组的同事过来求助:"某系统的应用有问题了,WEB页面打开以后出现ORACLE的ORA-12514错误,貌似监听有问题了!" 该系统的数据是采用RAC部署的模式, ...

  9. 统计 iOS 设备锁定、解锁次数-b

    今天下了个软件,可以记录手机解锁的次数和使用时间,当然啦,App 必须在后台运行着.当时比较纳闷的是有什么 API 可以接收设备解锁事件或通知的,Google 了下,还真有哎——我是链接:http:/ ...

  10. CATransition的动画效果类型及实现方法--老代码备用参考

    实现iphone漂亮的动画效果主要有两种方法,一种是UIView层面的,一种是使用CATransition进行更低层次的控制, 第一种是UIView,UIView方式可能在低层也是使用CATransi ...