luogu P1048ybtoj背包问题课堂过关DP例题1采药问题 &NOIP2005 普及组采药
Posted SSL_ZZL
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了luogu P1048ybtoj背包问题课堂过关DP例题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[x−w[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区间修改区间查询 & 上帝造题的七分钟
luogu P4513ybtoj线段树课堂过关例题3小白逛公园
ybtoj 单调队列课堂过关luogu P1886例题1滑动窗口