九度oj 题目1209:最小邮票数
- 题目描述:
-
有若干张邮票,要求从中选取最少的邮票张数凑成一个给定的总值。
如,有1分,3分,3分,3分,4分五张邮票,要求凑成10分,则使用3张邮票:3分、3分、4分即可。
- 输入:
-
有多组数据,对于每组数据,首先是要求凑成的邮票总值M,M<100。然后是一个数N,N〈20,表示有N张邮票。接下来是N个正整数,分别表示这N张邮票的面值,且以升序排列。
- 输出:
-
对于每组数据,能够凑成总值M的最少邮票张数。若无解,输出0。
- 样例输入:
-
10
5
1 3 3 3 4
- 样例输出:
-
3
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <cmath>
#define MAX 22 int ticket[MAX];
int flag[MAX];
int min; void dfs(int target, int end, int cnt) {
if(cnt > min) {
return;
}
if(target == ) {
if(cnt < min) {
min = cnt;
return;
}
}
for(int i = end-; i >= ; i--) {
if(flag[i] == && ticket[i] <= target) {
flag[i] = ;
dfs(target - ticket[i], i,cnt + );
flag[i] = ;
}
}
} int main()
{ int n, m;
while(scanf("%d",&n) != EOF) { scanf("%d",&m);
for(int i = ; i < m; i++) {
scanf("%d",&ticket[i]);
}
memset(flag,,sizeof(flag));
min = m+;
dfs(n,m,);
if(min != m+) {
printf("%d\n",min);
}
else {
puts("");
} }
return ;
}这道题考虑的是回溯法,并用类似天平的思想,从大到小依次加砝码。如果不行,全都移除,从下一个大的开始继续加。
这道题也能用动态规划求解,时间要稍长一些
写了一个简单的代码:
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <iostream>
#include <cmath>
#define MAX 22
#define inf 1000002
using namespace std; int ticket[MAX];
int dp[MAX][]; int main()
{
//freopen("input.txt","r",stdin);
int n, m;
while(scanf("%d",&n) != EOF) { scanf("%d",&m);
for(int i = ; i < m; i++) {
scanf("%d",&ticket[i]);
} for(int r = ; r <= n; r++) {
for(int i = ; i < m; i++) {
dp[i][r] = inf;
}
} for(int i = ; i <=n; i++) {
dp[i][] = ;
}
dp[][ticket[]] = ;
for(int r = ; r <= n; r++) {
for(int i = ; i < m; i++) {
if(r >= ticket[i]) {
dp[i][r] = min(dp[i-][r],dp[i-][r-ticket[i]] + );
}
else {
dp[i][r] = dp[i-][r];
}
}
} if(dp[m-][n] != inf) {
printf("%d\n", dp[m-][n]);
}
else {
puts("");
} }
return ;
}主要的难点在于初始化和转移方程
九度oj 题目1209:最小邮票数的更多相关文章
- 九度oj题目&吉大考研11年机试题全解
九度oj题目(吉大考研11年机试题全解) 吉大考研机试2011年题目: 题目一(jobdu1105:字符串的反码). http://ac.jobdu.com/problem.php?pid=11 ...
- 九度oj 题目1007:奥运排序问题
九度oj 题目1007:奥运排序问题 恢复 题目描述: 按要求,给国家进行排名. 输入: 有多组数据. 第一行给出国家数N,要求排名的国家数M,国家号 ...
- 九度OJ 题目1384:二维数组中的查找
/********************************* * 日期:2013-10-11 * 作者:SJF0115 * 题号: 九度OJ 题目1384:二维数组中的查找 * 来源:http ...
- hdu 1284 关于钱币兑换的一系列问题 九度oj 题目1408:吃豆机器人
钱币兑换问题 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Sub ...
- 九度OJ 1502 最大值最小化(JAVA)
题目1502:最大值最小化(二分答案) 九度OJ Java import java.util.Scanner; public class Main { public static int max(in ...
- 九度oj 题目1087:约数的个数
题目链接:http://ac.jobdu.com/problem.php?pid=1087 题目描述: 输入n个整数,依次输出每个数的约数的个数 输入: 输入的第一行为N,即数组的个数(N<=1 ...
- 九度OJ题目1105:字符串的反码
tips:scanf,cin输入字符串遇到空格就停止,所以想输入一行字符并保留最后的"\0"还是用gets()函数比较好,九度OJ真操蛋,true?没有这个关键字,还是用1吧,还是 ...
- 九度oj题目1009:二叉搜索树
题目描述: 判断两序列是否为同一二叉搜索树序列 输入: 开始一个数n,(1<=n<=20) 表示有n个需要判断,n= 0 的时候输入结束. 接 ...
- 九度oj题目1002:Grading
//不是说C语言就是C++的子集么,为毛printf在九度OJ上不能通过编译,abs还不支持参数为整型的abs()重载 //C++比较正确的做法是#include<cmath.h>,cou ...
随机推荐
- python第一模块基础语法
一·python和各大高级语言的优缺点比较 1.c语言开发效率低 2.c++开发效率高于c语言,低于java,python. 3.java代码臃肿,设计复杂,库繁杂量多. 4.PHP应用领域单一,且运 ...
- How many '1's are there题解
Description: Description: 第一行输入数字n(n<=50),表示有n组测试用例,第2到第n+1行每行输入数m(m为整数),统计并输出m用二进制表示时,1的个数. 例如:m ...
- matlab均方根误差
Matlab均方根误差的计算 http://blog.sina.com.cn/s/blog_6210f654010308kv.html
- P2421 A-B数对(增强版)
题目背景 woshiren在洛谷刷题,感觉第一题:求两数的和(A+B Problem)太无聊了,于是增加了一题:A-B Problem,难倒了一群小朋友,哈哈. 题目描述 给出N 个从小到大排好序的整 ...
- PHP开发基础视频教程
PHP现今作为互联网运用很广泛的编程语言,市场需求量也越来越高,而PHP开发工程师的薪资也是一路水涨船高,更多的人看到了PHP的发展前景,纷纷都想投入到PHP的开发大军中来,那么对于很多转行或者零基础 ...
- Tunneling cannot be enabled without the local_ip bound to an interface on the host. Please configure local_ip 192.168.30.71 on the host interface to be used for tunneling and restart the agen
按照官方文档配置linux bridge 会出现一下问题 Tunneling cannot be enabled without the local_ip bound to an interface ...
- Python学习日志9月13日
昨天的学习日志没有写,乱忙了一整天,政治电脑. 好奇心重,想要给电脑装上传说中LInux操作系统,各种小问题折腾到半夜,今天又折腾到晚上才真正的装上系统. 可是装上系统后又发现各种的不好用.虽然界面比 ...
- spring_boot入门
核心: 控制反转(Inversion of Control-IOC)和依赖注入(Dependency Injection-DI) Spring中两者是相同的, 控制反转是用依赖注入实现的. 这里, 依 ...
- UVA 11400 Lighting System Design 照明系统设计
首先是一个贪心,一种灯泡要么全都换,要么全都不换. 先排序,定义状态d[i]为前面i种灯泡的最小花费,状态转移就是从d[j],j<i,加上 i前面的j+1到i-1种灯泡换成i的花费. 下标排序玩 ...
- 玄学C语言之scanf,printf
#include <bits/stdc++.h> using namespace std; int main() { int a,c,d; ]; scanf("%d." ...