luogu P1048ybtoj背包问题课堂过关DP例题1采药问题 &NOIP2005 普及组采药

Posted SSL_ZZL

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了luogu P1048ybtoj背包问题课堂过关DP例题1采药问题 &NOIP2005 普及组采药相关的知识,希望对你有一定的参考价值。

【例题1】采药问题 & [NOIP2005 普及组] 采药


Link

luogu P1048 [NOIP2005 普及组] 采药
ybtoj【背包问题课堂过关】【例题1】采药问题
题面//因为不知道侵不侵权所以就是题面是私密的,有账号的直接看转送门就可了


题目大意

n n n株草药,采第 i i i株草药要花费 w i w_i wi的时间,同时也会获得 v i v_i vi的价值,要求你在 t t t时间内采到的草药总值最大。


解题思路

01背包模板题
f [ x ] f[x] f[x]为用时间 x x x可以摘到的总值最大的草药
f [ x ] = m a x ( f [ x ] , f [ x − w [ i ] ] + v [ i ] ) f[x]=max(f[x],f[x-w[i]]+v[i]) f[x]=max(f[x],f[xw[i]]+v[i])


Code

#include <iostream> 
#include <cstdio>

using namespace std;

int t, n, w[110], v[110], f[1100];

int main() {
	scanf("%d %d", &t, &n);
	for(int i = 1; i <= n; i++)
		scanf("%d %d", &w[i], &v[i]);
	for(int i = 1; i <= n; i++)
		for(int j = t; j >= w[i]; j--)  //倒序去重
			f[j] = max(f[j], f[j - w[i]] + v[i]);
	printf("%d", f[t]);
}

以上是关于luogu P1048ybtoj背包问题课堂过关DP例题1采药问题 &NOIP2005 普及组采药的主要内容,如果未能解决你的问题,请参考以下文章

luogu P4514ybtoj树状数组课堂过关差分 例题6区间修改区间查询 & 上帝造题的七分钟

ybtoj背包问题课堂过关DP例题3宝物筛选

luogu P4513ybtoj线段树课堂过关例题3小白逛公园

ybtoj 单调队列课堂过关luogu P1886例题1滑动窗口

luogu UVA10559 ybtoj 区间DP课堂过关 例题3消除木块 & 方块消除 Blocks

luogu P4170ybtoj 区间DP课堂过关 例题2木板涂色 & [CQOI2007]涂色