开心的金明
题目大意

就是求一定背包容量的最大值

思路

想必大家都知道,一看到这种题目,就会想起01背包

虽然特别简单但是还是讲一下吧

状态设置

由于这题差不多是一个01背包的版子题,那么我们就只需要一个一维的数组去记录状态

f[i]中i代表的是背包容量,而f[i]的值则代表该容量下的最大值

转移方程

f[i]=max(f[i],f[i-背包容量]+背包价值)

输出

输出的话我们就只需要输出f[背包容量]就可以啦

这个简单的DP题就讲完啦

代码在这里

小A点菜
题目大意

就是要求花光所有钱的方案数

思路

最开始我还不懂,发现题解的说法好有道理

我们设置一个二维数组来统计选到第i种物品花j的钱的方案数

最后我们就只要输出选到第n种物品话光全部钱的方案数

状态设置

f[i][j]中i代表现在选到第几种物品,j代表花的钱数

转移方程

1.如果我们枚举的钱数大于菜的价格即(j>a[i])

f[i][j]=f[i-1][j]+f[i-1][j-a[i]];//这2个式子相加分别代表不选这种物品和选这种物品,但是价格不变的方案数

2.如果我们枚举的钱数等于菜的价格即(j==a[i])

f[i][j]=f[i-1][j]+1//这2个值相加代表不选这种物品和选的方案数,由于我们不方便将f[i][0]定义为1,所以这里就特判处理一下(是这么理解的吧...)

3.如果小于

f[i][j]=f[i-1][j]//直接转移过来就可以啦

输出

直接输出f[n][m]

#include<bits/stdc++.h>
using namespace std;
int n,m;
int a[];
int f[][];
int scan()//快读撒
{
int as=,fin=;
char c=getchar();
while(c<''||c>''&&c!='-') c=getchar();
if(c=='-') fin=-;
while(c>=''&&c<='')
{
as=(as<<)+(as<<)+c-'';
c=getchar();
}
return as;
}
int main()
{
n=scan();
m=scan();
for(int i=;i<=n;i++)
{
a[i]=scan();
// cout<<a[i]<<endl;
}
for(int i=;i<=n;i++)//在这里面,i就像一个分层,所以我们没有必要倒着来
{
for(int j=;j<=m;j++)
{
if(j>a[i]) f[i][j]=f[i-][j]+f[i-][j-a[i]];
else if(j==a[i]) f[i][j]=f[i-][j]+;
else f[i][j]=f[i-][j];
// cout<<i<<" "<<j<<" "<<f[i][j]<<endl;
}
}
cout<<f[n][m];
return ;
}
/*
思路:
这题的话最开始有点蒙
现在来理一下思路
1.我们设置状态f[i][j],i是前i中,j是前,值为种数
2.
f[i][j]=f[i-1][j]+f[i-1][j-a[i]];//这种转移只是一个向前走的过程
f[i][j]=f[i-1][j]+1;//这种是方案添加
f[i][j]=f[i-1][j];//相当于不选择这种商品
大概是这样子吧
.........
DP还是要多练一练啊
*/

代码在这里


金明的预测

让我拖一会,先把简单题写完233333


疯狂的采药

题目描述

这个题目实质上就是一个求完全背包的问题

思路

我们就设置一个一维数组来记录相应容量的最大值

状态设置

f[i]中i代表容量,f[i]是该容量的值

转移方程

由于这个不是01背包,而是完全背包,所以我们枚举时要正着枚举,而不是像01背包一样倒着枚举

f[i]=max(f[i],f[i-a[i]]);

输出

直接输出f[m]就可以了...

#include<bits/stdc++.h>
using namespace std;
int T,n;
int f[]={};
struct ss
{
int wei,val;
}a[];
int scan()
{
char c=getchar();
int as=,f=;
while(c>''||c<''&&c!='-') c=getchar();
if(c=='-') f=-;
while(c>=''&&c<='')
{
as=(as<<)+(as<<)+c-'';
c=getchar();
}
return f*as;
}
int main()
{
T=scan();
n=scan();
for(int i=;i<=n;i++)
{
a[i].wei=scan();
a[i].val=scan();
}
for(int i=;i<=n;i++)
{
for(int j=a[i].wei;j<=T;j++)
{
f[j]=max(f[j],f[j-a[i].wei]+a[i].val);
}
}
cout<<f[T];
return ;
}
/*
思路:
我们只需要开一个一维数组,来表示背包的容量,
然后我们只需要在01背包的基础上将容量从小枚举到大
*/

代码在这里


 

恶补一下DP+背包专题(刷刷水题)L2的更多相关文章

  1. 【BZOJ】初级水题列表——献给那些想要进军BZOJ的OIers(自用,怕荒废了最后的六月考试月,刷刷水题,水水更健康)

    BZOJ初级水题列表——献给那些想要进军BZOJ的OIers 代码长度解释一切! 注:以下代码描述均为C++ RunID User Problem Result Memory Time Code_Le ...

  2. CF刷刷水题找自信 2

    CF 1114A  Got Any Grapes(葡萄)? 题目意思:给三个人分葡萄,三个人对葡萄的颜色有一些要求,问所准备的三种颜色的葡萄能否满足三人的要求. 解题意思:直接按条件判断即可. #in ...

  3. CF刷刷水题找自信1

    CF 1108A Two distinct points 题目意思:给你两个线段的起点和终点,让你给出两个不同的点,这两点分别处于两个不同的线段之中.解题思路:题目说如果存在多种可能的点,随意一组答案 ...

  4. World Finals 2017 (水题题解)

    看大佬做2017-WF,我这种菜鸡,只能刷刷水题,勉强维持生活. 赛后补补水题. 题目pdf链接,中文的,tls翻译的,链接在这里 个人喜欢在vjudge上面刷题. E Need for Speed ...

  5. UESTCOJ-BiliBili, ACFun… And More!(水题)

    BiliBili, ACFun… And More! Time Limit: 3000/1000MS (Java/Others)     Memory Limit: 65535/65535KB (Ja ...

  6. 水题 Codeforces Round #299 (Div. 2) A. Tavas and Nafas

    题目传送门 /* 很简单的水题,晚上累了,刷刷水题开心一下:) */ #include <bits/stdc++.h> using namespace std; ][] = {" ...

  7. hdu4791水题

    题意:       打印东西,给你区间和每个区间的价格,然后输入任务张数,输出最少花费..    题解:       昨晚的小测试就有这个题目,当时蒙B了,怎么也读不懂题目,一直纠结怎么把150拆成1 ...

  8. DP+贪心水题合集_C++

    本文含有原创题,涉及版权利益问题,严禁转载,违者追究法律责任 本次是最后一篇免费的考试题解,以后的考试题目以及题解将会以付费的方式阅读,题目质量可以拿本次作为参考 本来半个月前就已经搞得差不多了,然后 ...

  9. ACM :漫漫上学路 -DP -水题

    CSU 1772 漫漫上学路 Time Limit: 1000MS   Memory Limit: 131072KB   64bit IO Format: %lld & %llu Submit ...

随机推荐

  1. Nginx+proxy_cache图片缓存

    搭建图片缓存机制的原理在于减少数据库的负担并加快静态资源的响应. 步骤: 1. vim /usr/local/nginx/conf/nginx.conf 2. http{     ...     .. ...

  2. JZOJ 5195. 【NOIP2017提高组模拟7.3】A

    5195. [NOIP2017提高组模拟7.3]A Time Limits: 1000 ms  Memory Limits: 262144 KB  Detailed Limits   Goto Pro ...

  3. Python知识点入门笔记——Python文件操作、异常处理及random模块使用

    文件是存储在外部介质的数据集合,通常可以长久保存,前提是介质不易损坏 Python的绝对路径写法: E:\\编程学习资料\\爬取某社区高清无码大图.py E:/编程学习资料/爬取某社区高清无码大图.p ...

  4. [BZOJ1010]玩具装箱toy(斜率优化)

    Description P教授要去看奥运,但是他舍不下他的玩具,于是他决定把所有的玩具运到北京.他使用自己的压缩器进行压缩,其可以将任意物品变成一堆,再放到一种特殊的一维容器中.P教授有编号为1... ...

  5. [BZOJ1588]营业额统计(Splay)

    Description 题意:给定 n个数,每给定一个数,在之前的数里找一个与当前数相差最小的数,求相差之和(第一个数为它本身) 如:5 1 2 5 4 6 Ans=5+|1-5|+|2-1|+|5- ...

  6. HDU2586 How far away ?

    一.描述 很久没写代码了,在之前一直在参与准备ASC比赛和美赛,现在又重新捡起来.目标是两个月后的邀请赛. 这题是树链拋分解决LCA问题的一个模板题. 首先介绍下树链拋分的基本思想. 对于任意一颗树, ...

  7. (Winform)控件中添加GIF图片以及运用双缓冲使其不闪烁以及背景是gif时使控件(如panel)变透明

    Image img = Image.FromFile(@"C:\Users\joeymary\Desktop\3.gif"); pictureBox1.Image =img.Clo ...

  8. 查询语句为“%string_”的情况

    select * from t_user where user_name like '%Joe_%'实际查询出来的语句为: 而不像预计的前两条.

  9. Java集合---简介

    概念 集合可以理解为一个动态的对象数组,不同的是集合中的对象内容可以任意扩充.Java最基本的集合接口:Collection接口 集合的特点 性能高 容易扩展和修改 Collection的常用子类 L ...

  10. v-model 的修饰符

    1..trim 自动过滤输入内容最开始 和 最后的 空格,中间的会保留一个空格,多的会被过滤掉 2..lazy 一般情况下,在input的 v-model是一直在同步 输入的内容与显示的内容,不过再添 ...