九度 1531:货币面值(01背包)
题目描述:
小虎是游戏中的一个国王,在他管理的国家中发行了很多不同面额的纸币,用这些纸币进行任意的组合可以在游戏中购买各种装备来提升自己。有一天,他突然很想知道这些纸币的组合不能表示的最小面额是多少,请聪明的你来帮助小虎来解决这个财政问题吧
思路
1. 面值最小额度, 枚举的话时间复杂度为 o(n^3). 但思考一下就会发现其实这是背包问题恰好装满的变形题
2. 背包问题恰好装满是在朴素背包问题的基础上初始化 dp[0] = 0, dp[i] = 负无穷. 这样就会使得不能恰好装满的容量都是负无穷
3. 下面的代码设置的是 int dp[], 其实设置成 bool dp[] 也是可以的
代码
#include <iostream> #include <stdio.h> #include <memory.h> using namespace std;const int INF = 10005; int dp[10010]; int money[110];void dodp(int n) {memset(dp, 0x80, sizeof(dp));dp[0] = 0;for(int i = 0; i < n; i ++) {for(int v = INF; v >= 0; v --) {if(v >= money[i])dp[v] = max(dp[v-money[i]]+money[i], dp[v]);}}for(int i = 0; i < INF; i++) {if(dp[i] < 0) {cout << i << endl; break;}} }int main() {int n;while(scanf("%d", &n) != EOF) {for(int i = 0; i < n; i ++)scanf("%d", money+i);dodp(n);}return 0; }
转载于:https://www.cnblogs.com/xinsheng/p/3580202.html
九度 1531:货币面值(01背包)相关推荐
- 背包九讲系列1——01背包、完全背包、多重背包
我在进行一些互联网公司的技术笔试的时候,对于我来说最大的难题莫过于最后的那几道编程题了,这对算法和数据结构有一定程度上的要求,而"动态规划"又是编程题中经常出现的算法类型,并且对于 ...
- 九小时九个人九扇门(01背包)
题目链接 https://ac.nowcoder.com/acm/contest/23106/A 题面 思路 小技巧 一个数的数字根就是它对9取模,当然取模得0的数字跟就是9 做法 我们要求的是从n个 ...
- 动态规划 背包问题小结 0-1背包(采药 九度第101题) 完全背包(Piggy-Bank POJ 1384) 多重背包(珍惜现在,感恩生活 九度第103题)
本小结介绍0-1背包.完全背包以及多重背包问题 记忆要点: 0-1背包:二维数组情况下,顺序遍历体积或者倒序均可以 降维情况下需倒序遍历体积 完全背包:数组降维+顺序遍历 ...
- 九度 1462:两船载物问题(01背包)
题目描述: 给定n个物品的重量和两艘载重量分别为c1和c2的船,问能否用这两艘船装下所有的物品. 思路 1. 朴素背包问题 2. 有几个细节要好好把握 (1) 在读入物品重量时顺带统计物品的最大值和总 ...
- 浅说——九讲背包之01背包
所谓九讲,也就是: 0/1背包 0/1背包降维 完全背包 多重背包(二进制优化) 混合背包 二维费用背包 分组背包 有依赖的背包 背包的方案总数\背包的具体方案路径 0/1背包: [问题描述](经典) ...
- 九度 1209:最小邮票数(多重背包)
题目描述: 有若干张邮票,要求从中选取最少的邮票张数凑成一个给定的总值 如,有1分,3分,3分,3分,4分五张邮票,要求凑成10分,则使用3张邮票:3分.3分.4分即可 思路 1. 朴素背包问 ...
- 2020牛客寒假算法基础集训营3——J.牛牛的宝可梦Go【最短路 DP(01背包) 复杂度优化】(附优化分析)
题目传送门 题目描述 牛牛所在的W市是一个不太大的城市,城市有n个路口以及m条公路,这些双向连通的公路长度均为1,保证你可以从一个城市直接或者间接移动到所有的城市.牛牛在玩宝可梦Go,众所周知呢,这个 ...
- 背包九讲 (蒟蒻版)之01背包
hello,你们的loony上线啦.你们知道吗?我今天早上起来一看手机,600多人在CSDN上访问过我,当时我心情都要炸了(补充:高兴炸了),因为,这毕竟只是本蒟蒻的梦想嘛~ 好了不嘚瑟啦! 今天就来 ...
- 【01背包的k值问题 HDU2639 HDU2126】
HDU2639 有深度吧感觉还 题意:给出一行价值,一行体积,让你在v体积的范围内找出第k大的值 终结第k大的01背包, 复杂度: O(NMK) 注意选取的标准,选取后,要保证得到的价值是大于未选之前 ...
最新文章
- C++中vector的使用
- r语言 调用c windows,R:window()函数
- Web API之service worker
- poj3264Balanced Lineup(倍增ST表)
- 6.java 代码块
- 在Spring MVC Web应用程序中使用reCaptcha
- LinuxC高级编程——线程间同步
- .某学校的学生公寓有14栋楼,用A~N这14个大写字母的其中一个代表楼号,每栋楼的层数为6层,用1~6六个数字表示。每层楼有40个房间,编号为01~40。具体表示一个宿舍房间时,用1个字母加3位数字表
- Java常见OutOfMemoryError
- Android 开发者的 RxJava 详解(一)
- Installation error: INSTALL_FAILED_NO_MATCHING_ABIS
- 用C语言编写链式存储的线性表(含代码实现)
- [翻译] 使用ElasticSearch,Kibana,ASP.NET Core和Docker可视化数据
- Selenium爬虫 -- 无界面爬取:无头模式及其他参数
- HanLP里使用DAT存取字典的方法
- WPF学习(一)--布局控件简介
- 【代码优化】构造器参数繁多时候,考虑使用builder模式
- DG半离散格式的转化---基于matlab编写
- 浅谈计算机网络安全问题和对策
- unity 实现流光效果