九度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 ...
随机推荐
- 向fedora添加rpmfusion源
http://blog.csdn.net/pu1030/article/details/7332036 有的rpmfusion地址有版本问题,找到一个比较好用的摘录一下: 从http://downlo ...
- php调用c# webservice方法
第一次用,通过,还没深入了解. 首先在php.ini中启用extension=php_soap.dll,重启apache. $Client=new SoapClient("url?wsdl& ...
- Objective-C 类型转换
类型转换通常是指变量,从一种类型转换成另外一种类型.例如将一个long类型转换成int类型,变量转换通常 用下面的方式: (type_name) expression 在Objective-C中,我们 ...
- path与classpath区别(转)
转自http://blog.csdn.net/mydreamongo/article/details/8155408 1.path的作用 path是系统用来指定可执行文件的完整路径,即使不在path中 ...
- SVN中trunk,branches,tags用法详解【转】
Subversion有一个很标准的目录结构,是这样的.比如项目是proj,svn地址为svn://proj/,那么标准的svn布局是 svn://proj/|+-trunk+-branches+-ta ...
- COGS 615. 韩国明星
[问题描述] 在LazyCat同学的影响下,Roby同学开始听韩国的音乐,并且越来越喜欢H.o.T,尤其喜欢安七炫和Tony,可是,爱学习爱思考的Roby同学想,如果以后喜欢的韩星越来越多怎么办呢?R ...
- License开源许可协议
开源许可协议 License是软件的授权许可,表述了你获得代码后拥有的权利,可以对别人的作品进行何种操作,何种操作又是被禁止的. 开源许可证种类 Open Source Initiative http ...
- block总结
3.编译器中的block 3.1 block的数据结构定义 我们通过大师文章中的一张图来说明: 上图这个结构是在栈中的结构,我们来看看对应的结构体定义: 1 2 3 4 5 6 7 8 9 10 11 ...
- dubbo 分布式治理
1. dubbo 仅支持java语言之间的通讯. 2. dubbo 产生的背景是因为分布式的情况下产生的. 3. 解决服务治理的问题,通过注册中心进行管理 4.SOA 治理方案 tcp 协议传输,只需 ...
- 精选30道Java笔试题附答案分析
精选30道Java笔试题解答 都是一些非常非常基础的题,是我最近参加各大IT公司笔试后靠记忆记下来的,经过整理献给与我一样参加各大IT校园招聘的同学们,纯考Java基础功底,老手们就不用进来了,免得笑 ...