【Luogu】【关卡2-15】动态规划的背包问题(2017年10月)【还差一道题】
任务说明:这是最基础的动态规划。不过如果是第一次接触会有些难以理解。加油闯过这个坎。
01背包二维数组优化成滚动数组的时候有坑有坑有坑!!!必须要downto,downto,downto
情景和代码见装箱问题。
P1060 开心的金明
小明的妈妈给小明N元钱,小明想买m件物品,每个物品价值为 价格*重要度,求出不超过N元钱的情况下,最多能买多少价值的物品,输出价值。
解法:直接的01背包问题,我居然还去看了书。。递推方程一次写不出来。方程需要记忆。
dp[i][j]表示前i件物品总价格不超过j元的最大总价值。

需要学习下怎么在博客园输入latex公式orz。。。
#include <iostream>
#include <vector>
#include <cstdio>
#include <cstring> using namespace std; int main() {
int n, m;
cin >> n >> m;
int w[m][];
for (int i = ; i < m; ++i) {
cin >> w[i][] >> w[i][];
w[i][] *= w[i][];
} int dp[m+][n+];
memset(dp, , sizeof(dp)); for (int i = ; i <= m; ++i) {
for (int j = ; j <= n; ++j) {
if (w[i-][] > j) { dp[i][j] = dp[i-][j]; }
else {
dp[i][j] = max(dp[i-][j], dp[i-][j-w[i-][]] + w[i-][]);
}
}
}
cout << dp[m][n] << endl; return ;
}
P1164 小A点菜
有M元, N种菜(每个菜只有一份),每种菜有价格,求能把M元全花完的方案数。
解答:一开始全WA....哭死..其实还是经典的01背包问题。
一维的转移方程为: dp[j] += dp[j-price[i-1]]; 初始化条件为 dp[0] = 1, dp[1..m] = 0。 (因为需要花0元只有一种方案,就是啥也不买)
#include <bits/stdc++.h>
using namespace std; int main() {
int n, m;
cin >> n >> m;
int dp[m+] = {};
dp[] = ;
int price[n];
for (int i = ; i < n; ++i) {
cin >> price[i];
}
for(int i = ; i <= n; ++i) {
for (int j = m; j >= ; --j) {
if (j >= price[i-]) {
dp[j] = dp[j] + dp[j-price[i-]];
}
}
}
cout << dp[m] << endl;
return ;
}
金明的预算方案
P1048 采药
就是01背包,裸的,直接写了,方程同P1060
提交一次AC
#include <cstdlib>
#include <cstdio>
#include <iostream>
#include <cstring>
using namespace std; int main() {
int T, M;
cin >> T >> M;
int w[M][];
for (int i = ; i < M; ++i) {
cin >> w[i][] >> w[i][];
}
int dp[M+][T+];
memset(dp, , sizeof(dp)); for (int i = ; i <= M; ++i) {
for (int j = ; j <= T; ++j) {
if (j < w[i-][]) { dp[i][j] = dp[i-][j]; }
else {
dp[i][j] = max(dp[i-][j], dp[i-][j-w[i-][]] + w[i-][]);
}
}
}
cout << dp[M][T] << endl;
return ;
}
P1049 装箱问题
有一个箱子容量为V(正整数,0<=V<=20000),同时有n个物品(0<n<=30,每个物品有一个体积(正整数)。 要求n个物品中,任取若干个装入箱内,使箱子的剩余空间为最小。
就是求怎么样是用的空间最大。裸的01背包。优化成滚动数组的时候被坑了。
//写成滚动数组的时候,max(dp[j], dp[j-w[i-1]]+w[i-1]);如果是从左到右,那么dp[j-w[i-1]]是个已经被更新过的值。。
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring> using namespace std; int main() {
int c, n;
cin >> c >> n;
int w[n+];
for (int i = ; i < n; ++i) {
cin >> w[i];
}
int dp[c+] = {};
for (int i = ; i <= n; ++i) {
//滚动数组这么写的时候,max(dp[j], dp[j-w[i-1]]+w[i-1]);如果是从左到右,那么dp[j-w[i-1]]是个已经被更新过的值。。
//for (int j = 1; j <= c; ++j) {
for (int j = c; j >= ; --j) {
if (j < w[i-]) { dp[j] = dp[j]; }
else {
dp[j] = max(dp[j], dp[j-w[i-]]+w[i-]);
}
}
}
cout << c - dp[c] << endl;
return ;
}
P1616 疯狂的采药
采药问题的升级版,不限制每种物品的个数。完全背包问题(每个物品无穷个)。
完全背包的解法就是01背包的downto的写法改成正着写...不过这不是重点。重点是理解为啥需要正着写。
提交一次AC了

#include <bits/stdc++.h>
using namespace std;
int main() {
int T, M;
cin >> T >> M;
int w[M][];
for (int i = ; i < M; ++i) {
cin >> w[i][] >> w[i][];
}
int dp[T+] = {};
for (int i = ; i <= M; ++i) {
for (int j = ; j <= T; ++j) {
if (j < w[i-][]) { continue; }
else {
dp[j] = max(dp[j], dp[j-w[i-][]]+w[i-][]);
}
}
}
cout << dp[T] << endl;
return ;
}
【Luogu】【关卡2-15】动态规划的背包问题(2017年10月)【还差一道题】的更多相关文章
- 【Luogu】【关卡2-14】 树形数据结构(2017年10月)【AK】
任务说明:由一个根节点分叉,越分越多,就成了树.树可以表示数据之间的从属关系 P1087 FBI树 给一个01字符串,0对应B,1对应I,F对应既有0子节点又有1子节点的根节点,输出这棵树的后序遍历. ...
- 【Luogu】【关卡2-13】线性数据结构(2017年10月)【还差一道题】
任务说明:数组,链表,队列,栈,都是线性结构.巧用这些结构可以做出不少方便的事情. P1996 约瑟夫问题 n个人,排成环形,喊到m的人出列,输出出列顺序. 咳咳,这个题目不好写,尽管简单就是模拟题. ...
- 【Luogu】【关卡2-10】分治算法(2017年10月)
任务说明:将大问题拆分为小问题,分而治之,各个击破,然后在合并回来. 取余运算||快速幂 幂次方 逆序对 南蛮图腾
- 【Luogu】【关卡2-8】广度优先搜索(2017年10月)
任务说明:广度优先搜索可以用来找有关“最短步数”的问题.恩,也可以用来“地毯式搜索”.
- 【Luogu】【关卡2-7】深度优先搜索(2017年10月)【AK】【题解没写完】
任务说明:搜索可以穷举各种情况.很多题目都可以用搜索完成.就算不能,搜索也是骗分神器. P1219 八皇后 直接dfs.对角线怎么判断:同一条对角线的横纵坐标的和或者差相同. #include < ...
- 【Luogu】【关卡2-5】字符串处理(2017年10月)
任务说明:这里的字符串处理还会变得更加的有意思,难度也更大.需要好好地思考一下.
- 【Luogu】【关卡2-4】排序Ex(2017年10月)
任务说明:这里的排序就更上一层了.不仅融合了别的算法与技巧,排序本身也有各种花招.
- 【Luogu】【关卡2-2】交叉模拟(2017年10月)
任务说明:这里也是模拟,但是会混有些别的部分.思维难度不大,但是编写起来会有些难度.
- 欢迎来怼-Alpha周(2017年10月19)贡献分配规则和分配结果
.从alpha周(2017年10月19日开始的2周)开始,提高贡献分比重. 贡献分 : 团队分 = 1 : 5 教师会在核算每位同学总分时按比例乘以系数. 每位同学带入团队贡献分10分,如果团队一共7 ...
- 2017年10月31日结束Outlook 2007与Office 365的连接
2017 年10月31日 ,微软即将推出 Office 365中Exchange Online邮箱将需要Outlook for Windows的连接,即通过HTTP Over MAPI方式,传统使用R ...
随机推荐
- yum 仓库搭建与源码包安装实战
目录 一.yum 仓库自建示例: 二.源码包安装实践 基础环境 服务端配置 下载及安装fpm软件 客户端: 一.yum 仓库自建示例: 1.安装ftp服务 yum -y install vsftpd ...
- 调整Winfrom控件WebBrowser的默认浏览器内核版本
一.问题解析: 今天在调试程序的时候,需要使用C#的客户端远程登录一个Web页面,用到了WebBrowser控件.但是却发现了一件很神奇的事情:当前浏览器使用的内核,可以通过访问下面这个网站获取:ht ...
- Pydiction补全插件
Pydiction不需要安装,所有没有任何依赖包问题,Pydiction主要包含三个文件. python_pydiction.vim -- Vim plugin that autocompletes ...
- 【NOIP2019模拟11.01】Game(贪心+线段树)
Description: 小 A 和小 B 在玩一个游戏,他们两个人每人有
- bzoj 2013
http://www.lydsy.com/JudgeOnline/problem.php?id=2013 最初看这个题的时候,以为神题不可做,然后去找yzjc..然后做法过于简单了(' ' ...
- Linux内核学习-进程
先说几个术语: 一.Linux进程的五个段 下面我们来简单归纳一下进程对应的内存空间中所包含的5种不同的数据区都是干什么的.重点:代码段.数据段.堆栈段,这是一个概念堆.栈.全局区.常量区,这是另一个 ...
- Django基础篇(二)与mysql配合使用
需求:模拟实现学员管理系统.<*_* 从基础做起> 表结构如下: 班级/学生/老师 班级表: id title 1 xx 2 xx 学生表: id name ...
- 《ArcGIS Runtime SDK for .Net开发笔记》--介绍与环境搭建
一. ArcGIS Runtime SDK for .NET介绍 ArcGIS Runtime SDK for .net是一款针对windows平台的开发包.能够在开发出在windows phone, ...
- python singleton 4种单例
def singleton(cls, *args, **kwargs): instances = {} def inner(cls, *args, **kwargs): if cls not in i ...
- VMware 虚拟机NAT模式如何设置网络连接,从头到尾全过程~!!
一.首先查看自己的虚拟机服务有没有开启,选择电脑里面的服务查看: 1.计算机点击右键选择管理 2.进入管理选择VM开头的服务如果没有开启的话就右键开启 二.虚拟机服务开启后就查看本地网络虚拟机的网 ...