题目大意

给你\(n\)个数\(a_1, a_2 ... a_n\), 要你求最大的正整数\(m\)使得方程\(a_1 x_1 + a_2 x_2 + ... + a_n x_n = m\)无非负整数解. 题目数据满足\(a_x\)为正整数且不大于\(256\), \(n \le 10\).

Solution

先看一个定理: 对于正整数\(p\), \(q\)满足\(gcd(p, q) = 1\), 我们有\(px + qy = n\)无非负整数解的最大正整数\(n\)为\(pq - p - q\). 证明如下:

我们首先利用反证法, 证明\(px + qy \ne pq - p - q\): 我们假设存在正整数\(x\)和\(y\)使得\(px + qy = pq - p - q\), 则有

\[px + qy = pq - p - q \\
p(x + 1) + q(y + 1) = pq \\
\because gcd(p, q) = 1且p | q(y + 1) \\
\therefore p | y + 1 \\
同理, q | x + 1
\]

接着我们令\(y + 1 = pj\), \(x + 1 = qk\). 则有

\[pqk + qpj = pq \\
pq(j + k) = pq
\]

注意到\(x, y \ge 0\), 我们有\(y + 1 \ge 1\)且\(x + 1 \ge 1\), 因而\(j \ge 1\)且\(k \ge 1\). 因而\(j + k \ge 2\), 因而假设不成立.

得证.

再证明当\(n \ge pq - p - q + 1\)时原方程总有非负整数解:

我们令\(n = pq - p - q + k\), 则根据扩展欧几里得定理, 方程\(pa + qb = k\)有整数解(其中\(a\)和\(b\)中必有一个为正, 一个为负). 我们假设\(a < 0 < b\), 调整\(a\)和\(b\)的值使得\(|a| < q\). 令此时的\(a\)和\(b\)分别为\(A\)和\(B\).

回到原方程

\[px + qy = pq - p - q + k \\
px + qy = pq - p - q + Ax + By \\
p(x + 1 - A) + q(y + 1 - B) = pq
\]

根据前面的结论, 我们又有

\[p | y + 1 - B \\
q | x + 1 - A
\]

因此我们令

\[j = \frac{x + 1 - A} q \\
k = \frac{y + 1 - B} p
\]

则有

\[pq(i + j) = pq \\
i + j = 1
\]

不妨设\(i = 0\)且\(j = 1\), 则

\[\begin{cases}
y + 1 - B= 0 \\
x + 1 - A = q
\end{cases}
\]

因而

\[y = B - 1 \\
x = A + q - 1
\]

由于\(B > 0\), 因而\(B - 1 \ge 0\);

根据之前定义, 我们又有\(|A| < q\), 因而\(A + q - 1 \ge 0\)

因而原方程必有非负整数解.

好了, 现在考虑这道题怎么做233

注意到\(a\)值较小, 我们直接从0开始到\(256^2\)背包暴力即可.

我们注意到\(a\)之间并不一定互质, 但这并不影响我们枚举的范围.

#include <cstdio>
#include <cctype> const int N = 10, LIM = 256;
int a[N], f[LIM * LIM << 2];
int main()
{
int n; scanf("%d", &n);
for(int i = 0; i < n; ++ i) scanf("%d", a + i);
f[0] = 1;
for(int i = 1; i < LIM * LIM << 2; ++ i) for(int j = 0; j < n; ++ j) if(i - a[j] >= 0 && f[i - a[j]]) f[i] = 1;
int ans = 0;
for(int i = 1; i < LIM * LIM << 2; ++ i) if(! f[i]) ans = i;
printf("%d\n", ans > LIM * LIM ? 0 : ans);
}

USACO 4.1.1 麦香牛块 Beef McNuggets的更多相关文章

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

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

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

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

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

    https://www.luogu.org/problemnew/show/P2737 题目描述 农夫布朗的奶牛们正在进行斗争,因为它们听说麦当劳正在考虑引进一种新产品:麦香牛块.奶牛们正在想尽一切办 ...

  4. [Luogu2737] [USACO4.1]麦香牛块Beef McNuggets

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

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

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

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

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

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

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

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

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

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

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

随机推荐

  1. IOS开发学习笔记027-UITableView 使用模型对象

    1.模型对象 2.单组数据的显示 1.模型对象 继续优化上一个程序 上一次用到字典,但是坏处多多.这里将这些数据封装到类中. 这就是MVC中得模型,模型就是数据的显示结构 新建一个类,添加几个属性和一 ...

  2. 安恒月赛 image up

    http://101.71.29.5:10007/index.php?page=login 仔细观察这个url的话会发现,存在文件包含. 而且并没有login.php而是login,猜测代码是 < ...

  3. Python学习-day13 SqlAlchemy

    本节内容 ORM介绍 sqlalchemy安装 sqlalchemy基本使用 多外键关联 多对多关系 表结构设计作业 1. ORM介绍 orm英文全称object relational mapping ...

  4. Git 笔记 - section 1

    1. 创建版本库 创建目录 git init git add <file> git commit -m "本次提交内容的说明" 2. 查看状态 git status g ...

  5. linux基础(基本命令)

    Linux学习                         1.Linux安装.配置 Linux的操作背景介绍 Linux操作系统 开源.自由且开发源代码的类Unix操作系统 厂商较多 著名的有R ...

  6. Windows下Git多账号ssh-key(复制自己用)

    Windows下Git多账号配置,同一电脑多个ssh-key的管理 这一篇文章是对上一篇文章<Git-TortoiseGit完整配置流程>的拓展,所以需要对上一篇文章有所了解,当然直接往下 ...

  7. jquery的html、text、val的用法

    .html()用为读取和修改元素的HTML标签 .text()用来读取或修改元素的纯文本内容 .val()用来读取或修改表单元素的value值. 这三个方法功能上的对比 .html(),.text() ...

  8. AngularJs之HelloWorld

    <!DOCTYPE html> <html lang="en" ng-app> <head> <meta charset="UT ...

  9. Mail.Ru Cup 2018 Round 2 Problem C Lucky Days

    设在第 $x$ 天二人都 lucky,则有 $\DeclareMathOperator{\lcm}{lcm}$ $ x = y_a t_a + R_a $ $ x= y_b t_ b + R_b$ 约 ...

  10. 用 Ipe 画图

    如何画一个箭头 首先要了解一个概念:「path object」. Path objects are objects that are formed with lines or curves, exam ...