【OpenJ_Bailian 4120】 + dp
2016-10-02 16:53
344 查看
硬币
Time Limit: 1000MS Memory Limit: 262144KB 64bit IO Format: %I64d & %I64u
Submit
Status
Description
宇航员Bob有一天来到火星上,他有收集硬币的习惯。于是他将火星上所有面值的硬币都收集起来了,一共有n种,每种只有一个:面值分别为a1,a2… an。 Bob在机场看到了一个特别喜欢的礼物,想买来送给朋友Alice,这个礼物的价格是X元。Bob很想知道为了买这个礼物他的哪些硬币是必须被使用的,即Bob必须放弃收集好的哪些硬币种类。飞机场不提供找零,只接受恰好X元。
Input
第一行包含两个正整数n和x。(1 <= n <= 200, 1 <= x <= 10000)
第二行从小到大为n个正整数a1, a2, a3 … an (1 <= ai <= x)
Output
第一行是一个整数,即有多少种硬币是必须被使用的。
第二行是这些必须使用的硬币的面值(从小到大排列)。
Sample Input
5 18
1 2 3 5 10
Sample Output
2
5 10
Hint
输入数据将保证给定面值的硬币中至少有一种组合能恰好能够支付X元。
如果不存在必须被使用的硬币,则第一行输出0,第二行输出空行。
注意 : 题目给的数据至少有一种能恰好支付 x 元,所以省去了判断直接求出必须用到的硬币.
Time Limit: 1000MS Memory Limit: 262144KB 64bit IO Format: %I64d & %I64u
Submit
Status
Description
宇航员Bob有一天来到火星上,他有收集硬币的习惯。于是他将火星上所有面值的硬币都收集起来了,一共有n种,每种只有一个:面值分别为a1,a2… an。 Bob在机场看到了一个特别喜欢的礼物,想买来送给朋友Alice,这个礼物的价格是X元。Bob很想知道为了买这个礼物他的哪些硬币是必须被使用的,即Bob必须放弃收集好的哪些硬币种类。飞机场不提供找零,只接受恰好X元。
Input
第一行包含两个正整数n和x。(1 <= n <= 200, 1 <= x <= 10000)
第二行从小到大为n个正整数a1, a2, a3 … an (1 <= ai <= x)
Output
第一行是一个整数,即有多少种硬币是必须被使用的。
第二行是这些必须使用的硬币的面值(从小到大排列)。
Sample Input
5 18
1 2 3 5 10
Sample Output
2
5 10
Hint
输入数据将保证给定面值的硬币中至少有一种组合能恰好能够支付X元。
如果不存在必须被使用的硬币,则第一行输出0,第二行输出空行。
注意 : 题目给的数据至少有一种能恰好支付 x 元,所以省去了判断直接求出必须用到的硬币.
#include<cstdio> #include<cstring> #include<algorithm> using namespace std; int ma[10011],pa[211],a[10011],b[211]; int main() { int N,M,i,j,pl = 0; scanf("%d%d",&N,&M); for(i = 1 ; i <= N ; i++) scanf("%d",&pa[i]); ma[0] = 1; for(i = 1 ; i <= N ; i++) for(j = M ; j >= pa[i]; j--) ma[j] += ma[j - pa[i]]; // 当前恰好支付 j 元的方案数 for(i = 1 ; i <= N; i++) { memset(a,0,sizeof(a)); for(j = 0; j <= M; j++){ if(j >= pa[i]) a[j] = ma[j] - a[j - pa[i]]; // 不用到 pa[i] 的可以组成 j 的方案数 else a[j] = ma[j]; } if(a[M] == 0) // 如果方案数为 0 则说明 pa[i] 是必须的 b[++pl] = pa[i]; } printf("%d\n",pl); for(i = 1 ; i <= pl; i++) printf("%d ",b[i]); return 0; }
相关文章推荐
- OpenJ_Bailian 4120 dp
- [OpenJ_Bailian - 4124 海贼王之伟大航路] DFS+二进制状态压缩 / 状压DP
- OpenJ_Bailian - 4120
- 【OpenJ_Bailian】4118 - 开餐馆(dp)
- OpenJ_Bailian - 4120 硬币(母函数)
- OpenJ_Bailian - 2773 采药(DP)
- OpenJ_Bailian - 2754:八皇后
- OpenJ_Bailian 4081 树的转换 数据结构
- 复杂的整数划分问题 OpenJ_Bailian - 4119
- OpenJ_Bailian 2980 || POJ 2389 大整数乘法
- 显示器 OpenJ_Bailian - 2745
- 【埃氏筛法】 OpenJ_Bailian - 3177 判决素数个数
- OpenJ_Bailian 2755 神奇的口袋
- OpenJ_Bailian 4118 开餐馆 (动态规划)
- OpenJ_Bailian - 2748
- 【记忆化搜索】爬楼梯 OpenJ_Bailian - 4017
- poj-4118-OpenJ_Bailian-开餐馆【贪心】【背包】
- OpenJ_Bailian——4115鸣人和佐助(带状态的A*)
- A - 简单的整数划分问题 OpenJ_Bailian - 4117 (递归or动态规划)
- 生理周期 OpenJ_Bailian - 4148