NOI 4976:硬币
- 描述
-
宇航员Bob有一天来到火星上,他有收集硬币的习惯。于是他将火星上所有面值的硬币都收集起来了,一共有n种,每种只有一个:面值分别为a1,a2… an。 Bob在机场看到了一个特别喜欢的礼物,想买来送给朋友Alice,这个礼物的价格是X元。Bob很想知道为了买这个礼物他的哪些硬币是必须被使用的,即Bob必须放弃收集好的哪些硬币种类。飞机场不提供找零,只接受恰好X元。
- 输入
- 第一行包含两个正整数n和x。(1 <= n <= 200, 1 <= x <= 10000)
第二行从小到大为n个正整数a1, a2, a3 … an (1 <= ai <= x) - 输出
- 第一行是一个整数,即有多少种硬币是必须被使用的。
第二行是这些必须使用的硬币的面值(从小到大排列)。 - 样例输入
-
5 18
1 2 3 5 10 - 样例输出
-
2
5 10 - 提示
- 输入数据将保证给定面值的硬币中至少有一种组合能恰好能够支付X元。
如果不存在必须被使用的硬币,则第一行输出0,第二行输出空行 - 思路:解题思路:我们考虑a[i]是否满足其实必须元素,容易想到,f[x]-f[x-a[i]]是否为零,但是f[x-a[i]]的方案数中可能也会用到a[i],所以f[x-a[i]]-f[x-a[i]*2],整理一下就是f[x]-f[x-a[i]]+f[x-a[i] *2],也很容易发现容斥规律,由此可以递归求解,递归边界为x-a[i] *k<0或者f[x-a[i] *k]==0;
- 例如:测试数据,01背包后
- f=(1,1,1,2,1,2,2,1,2,1,2,2,1,2,1,2,2,1,2)
- 那么, f[18]->f[15] 使用了3,
- 但是,15=10,5 或 15=10,2,3;
- 这样,我们就多考虑了一种情况;
- 所以,要加上这种多考虑的情况
-
program ex03;
var f:array[..] of int64;
a,ans:array[..] of longint;
n,tot,x:longint;
procedure dp; //01背包
var i,j:longint;
begin
f[]:=;
for i:= to n do
for j:=x downto a[i] do
begin
f[j]:=f[j]+f[j-a[i]];
end;
end;
procedure init;
var i:longint;
begin
readln(n,x);
for i:= to n do read(a[i]);
end;
function cal(x,y:longint):longint;
begin
if x< then exit() else exit(f[x]-cal(x-y,y));
end;
procedure doit;
var i:longint;
begin
for i:= to n do
begin
if f[x]-cal(x-a[i],a[i])= then //判断是否必要
begin
inc(tot);
ans[tot]:=a[i];
end;
end;
end;
procedure print;
var i:longint;
begin
writeln(tot);
for i:= to tot do
write(ans[i],' ');
end;
begin
init;
dp;
doit;
print;
end.
NOI 4976:硬币的更多相关文章
- OpenJudge NOI 4976 硬币
http://noi.openjudge.cn/ch0207/4976/ 描述 宇航员Bob有一天来到火星上,他有收集硬币的习惯.于是他将火星上所有面值的硬币都收集起来了,一共有n种,每种只有一个:面 ...
- 2016.4.3NOI上较难的动规题目(仔细分析样例)--王老师讲课整理
1.NOI 191:钉子和小球 总时间限制: 1000ms 内存限制: 65536kB 描述 有一个三角形木板,竖直立放,上面钉着n(n+1)/2颗钉子,还有(n+1)个格子(当n=5时如图1).每 ...
- 投入OJ的怀抱~~~~~~~~~~
OpenJudge C20182024 信箱(1) 账号 修改设定 退出小组 管理员 frank 林舒 Dzx someone 李文新 公告 11-05 程序设计与算法(大学先修课) 成员(61910 ...
- NOI前训练日记
向别人学习一波,记点流水帐.17.5.29开坑. 5.29 早晨看了道据说是树状数组优化DP的题(hdu5542),然后脑补了一个复杂度500^3的meet in the middle.然后死T... ...
- [LeetCode] Arranging Coins 排列硬币
You have a total of n coins that you want to form in a staircase shape, where every k-th row must ha ...
- [LeetCode] Coin Change 硬币找零
You are given coins of different denominations and a total amount of money amount. Write a function ...
- 【bzoj1708】[USACO2007 Oct]Money奶牛的硬币
题目描述 在创立了她们自己的政权之后,奶牛们决定推广新的货币系统.在强烈的叛逆心理的驱使下,她们准备使用奇怪的面值.在传统的货币系统中,硬币的面值通常是1,5,10,20或25,50,以及100单位的 ...
- SQL 谜题(硬币的组合)
问题:早在ITPUB中看过有个SQL高手,喜欢出谜题,以下是一个谜题.我试用SQL SERVER解决此问题. 用1分,5分,10分,25分,50分硬币凑成一元,总共有几种组合办法? SELECT'1* ...
- 洛谷P2964 [USACO09NOV]硬币的游戏A Coin Game
题目描述 Farmer John's cows like to play coin games so FJ has invented with a new two-player coin game c ...
随机推荐
- Camstar Portal modeling user guid --自定义用户菜单
通过studio 创建 menu definition 创建菜单 创建成功后到employee界面设置对应菜单就可以了
- msdn webcast 下载地址整理
http://blog.csdn.net/he_8134/article/details/2069194
- css 下拉列表的制作
圣诞节后上课就是不在状态,一整天都在神游,还感觉特别累,本来想休息休息的,结果某人看不惯我一直吃东西,非得把电脑给我打开,让整理今天所学的内容,想了一下,确实上午讲的用无序列表<ul>做的 ...
- 安装SQL SERVER开启SA用户登录的方法
家庭安装SQL SERVER开启SA用户登录的方法:(切记按照网址操作完后,最后一定要在"管理工具"的"服务"里把"SQL SERVER(MSSQL ...
- Appium移动自动化测试之安装Appium
第一次学习appium,希望此安装教程可以帮助初学者,共同学习. Appium官网介绍:Appium是与本地,使用开源自动化测试框架, 混合和移动Web应用程序. 它驱动iOS和Android应用使用 ...
- socket阻塞与非阻塞,同步与异步
socket阻塞与非阻塞,同步与异步 作者:huangguisu 转自:http://blog.csdn.net/hguisu/article/details/7453390 1. 概念理解 在进行网 ...
- JS学习之函数内部属性和方法
知识点:arguments和this对象.caller属性.apply()和call()方法 arguments对象:函数内部对象,传入函数中所有参数的集合,类数组对象 属性:callee 指 ...
- WCF账户密码认证
记录一下我实现WCF用户认证与权限控制的实现方法, 也让其他网友少走一些弯路. 内容写得非常小白(因为我也是小白嘛), 比较详细, 方便WCF知识基础薄的朋友 主要分为下面几个步骤 作为例子, 创建最 ...
- js将json字符串转化成json对象的方法
js将json字符串转化成json对象的方法: JSON.parse(jsonObject)
- AFN 无网络监控
直接把封装到请求里就好 -(void)afn{ //1.创建网络状态监测管理者 AFNetworkReachabilityManager *manger = [AFNetworkReachabilit ...