九度OJ 1531 货币面值(网易游戏2013年校园招聘笔试题) -- 动态规划
题目地址:http://ac.jobdu.com/problem.php?pid=1531
- 题目描述:
-
小虎是游戏中的一个国王,在他管理的国家中发行了很多不同面额的纸币,用这些纸币进行任意的组合可以在游戏中购买各种装备来提升自己。有一天,他突然很想知道这些纸币的组合不能表示的最小面额是多少,请聪明的你来帮助小虎来解决这个财政问题吧。
- 输入:
-
输入包含多个测试用例,每组测试用例的第一行输入一个整数N(N<=100)表示流通的纸币面额数量,第二行是N个纸币的具体表示面额,取值[1,100]。
- 输出:
-
对于每组测试用例,输出一个整数,表示已经发行的所有纸币都不能表示的最小面额(已经发行的每个纸币面额最多只能使用一次,但面值可能有重复)。
- 样例输入:
-
5
1 2 3 9 100
5
1 2 4 9 100
5
1 2 4 7 100
- 样例输出:
-
7
8
15
使用0-1背包来解:
#include <stdio.h>
#include <stdlib.h>
#include <string.h> int N;
int value[101];
int dp[10001];
int max; int Compare(const void * p, const void * q){
return *(int *)p - *(int *)q;
} int Max(int a, int b){
return (a > b) ? a : b;
} int ZeroOnePack(){
int i, j;
memset(dp, 0, sizeof(dp));
for (i = 1; i <= N; ++i){
for (j = max; j >= value[i]; --j){
dp[j] = Max(dp[j], dp[j-value[i]] + value[i]);
}
}
for (i = 1; i <= max; ++i)
if (dp[i] != i)
return i;
} int main(void){
int i; while (scanf("%d", &N) != EOF){
max = 0;
for (i = 1; i <= N; ++i){
scanf("%d", &value[i]);
max += value[i];
}
qsort(value, N, sizeof(int), Compare);
printf("%d\n", ZeroOnePack());
} return 0;
}
第二种解法:
//动态规划的思想, 对于从第1个到第i个数的和total,
//如果第i+1个数大于total+1则不会组成total+1.
#include <stdio.h>
#include <stdlib.h> int Compare(const void * p, const void * q){
return *(int *)p - *(int *)q;
} int main(void){
int N;
int value[100];
int i;
int ans; while (scanf("%d", &N) != EOF){
for (i = 0; i < N; ++i){
scanf("%d", &value[i]);
}
qsort(value, N, sizeof(int), Compare);
ans = 0;
for (i = 0; i < N; ++i){
if (value[i] > ans + 1){
break;
}
else
ans += value[i];
}
printf("%d\n", ans + 1);
} return 0;
}
参考资料:背包问题九讲
九度OJ 1531 货币面值(网易游戏2013年校园招聘笔试题) -- 动态规划的更多相关文章
- Microsoft 2013校园招聘笔试题及解答
Microsoft 2013校园招聘笔试题及解答 题目是自己做的,求讨论.吐槽.拍砖 1. Which of the following callingconvension(s) suppo ...
- 九度OJ 1501 最大连续子序列乘积 -- 动态规划
题目地址:http://ac.jobdu.com/problem.php?pid=1501 题目描述: 给定一个浮点数序列(可能有正数.0和负数),求出一个最大的连续子序列乘积. 输入: 输入可能包含 ...
- 九度OJ 朋友圈 -- 并查集
题目地址:http://ac.jobdu.com/problem.php?pid=1526 题目描述: 假如已知有n个人和m对好友关系(存于数字r).如果两个人是直接或间接的好友(好友的好友的好友.. ...
- 九度OJ 1500 出操队形 -- 动态规划(最长上升子序列)
题目地址:http://ac.jobdu.com/problem.php?pid=1500 题目描述: 在读高中的时候,每天早上学校都要组织全校的师生进行跑步来锻炼身体,每当出操令吹响时,大家就开始往 ...
- hdu 1284 关于钱币兑换的一系列问题 九度oj 题目1408:吃豆机器人
钱币兑换问题 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Sub ...
- 九度oj 题目1087:约数的个数
题目链接:http://ac.jobdu.com/problem.php?pid=1087 题目描述: 输入n个整数,依次输出每个数的约数的个数 输入: 输入的第一行为N,即数组的个数(N<=1 ...
- 九度OJ 1502 最大值最小化(JAVA)
题目1502:最大值最小化(二分答案) 九度OJ Java import java.util.Scanner; public class Main { public static int max(in ...
- 九度OJ,题目1089:数字反转
题目描述: 12翻一下是21,34翻一下是43,12+34是46,46翻一下是64,现在又任意两个正整数,问他们两个数反转的和是否等于两个数的和的反转. 输入: 第一行一个正整数表示测试数据的个数n. ...
- 九度OJ 1024 畅通工程 -- 并查集、贪心算法(最小生成树)
题目地址:http://ac.jobdu.com/problem.php?pid=1024 题目描述: 省政府"畅通工程"的目标是使全省任何两个村庄间都可以实现公路交通(但 ...
随机推荐
- Linux下修改Oracle监听地址
如果你的服务器换了ip怎么办? 如果你的服务器换了名字怎么办? 以前的小伙伴怎么办? 以前的老客户怎么办? 没关系,简单教你修改监听地址,老朋友随便找! 想要修改监听地址首先要找到两个文件,确定两样东 ...
- hbase多用户入库,regionserver下线问题
近期对hbase多用户插入数据时,regionserver会莫名奇妙的关闭,regionserver的日志有很多异常: 如下: org.apache.hadoop.hbase.DroppedSnaps ...
- 新浪旗下的SAE云服务入门
前言: 云服务已经火热很多年了,到了现在已经基本进入稳定期,稍微有实力的公司都会推出免费的云存储,像百度的还几个T,速度也不错.如果不担心数据安全问题,代替平时的U盘还是没有问题.而SAE是新浪在20 ...
- android小笔记
1.启动其他应用程序 Intent launchIntent = getPackageManager().getLaunchIntentForPackage(currentAppInfo.getPac ...
- 设计模式之Composite模式(笔记)
组合模式:将对象组合成树形结构以表示"部分-总体"的层次结构. 组合模式使得用户对单个对象和组合对象的使用具有一致性. 适用场合:当需求中是体现部分与总体层次的结构时,以及希望用户 ...
- innobackupex --slave-info参数的含义和适用场景
http://blog.itpub.net/28916011/viewspace-1969135/ 我有个问题一直没弄明白,就是innobackupex里面的--slave-info这个参 ...
- 获取用户ip接口
<script type="text/javascript" charset="gb2312" src="http://counter.sina ...
- DRM in Android
我们Tieto公司的MM专家在<程序员>第8期上发表了一篇关于DRM的文章,请大家指教. DRM in Android DRM,英文全称为Digital Rights Management ...
- show variables 详解
back_log MySQL主线程检查连接并启动一个新线程这段时间内,可以设置多少个请求可以被存在堆栈中 connect_timeout 连接超时 检测方法nmap -p3306 数据库ip dela ...
- jQuery实现jsonp源码分析(京东2015面试)
// Bind script tag hack transportjQuery.ajaxTransport( "script", function(s) { // This tra ...