首页 > 其他分享 >P1048 采药

P1048 采药

时间:2024-10-12 21:50:46浏览次数:8  
标签:背包 int 110 草药 采药 P1048 价值 dp

辰辰是个天资聪颖的孩子,他的梦想是成为世界上最伟大的医师。为此,他想拜附近最有威望的医师为师。医师为了判断他的资质,给他出了一个难题。医师把他带到一个到处都是草药的山洞里对他说:“孩子,这个山洞里有一些不同的草药,采每一株都需要一些时间,每一株也有它自身的价值。我会给你一段时间,在这段时间里,你可以采到一些草药。如果你是一个聪明的孩子,你应该可以让采到的草药的总价值最大。”

如果你是辰辰,你能完成这个任务吗?

输入格式

第一行有 22 个整数 TT(1≤T≤10001≤T≤1000)和 MM(1≤M≤1001≤M≤100),用一个空格隔开,TT 代表总共能够用来采药的时间,MM 代表山洞里的草药的数目。

接下来的 MM 行每行包括两个在 11 到 100100 之间(包括 11 和 100100)的整数,分别表示采摘某株草药的时间和这株草药的价值。

输出格式

输出在规定的时间内可以采到的草药的最大总价值。

输入输出样例

输入 #1

70 3
71 100
69 1
1 2

输出 #1

3

这是一道简单的背包问题,我先来说一下什么是01背包(完全背包相似于01背包 ):

我们现在有一下东西:

物品价值体积
矿泉水23
葡萄45
西瓜810

现在你有一个体积为17的背包,怎么放东西才能使背包内的物体价值尽可能地大

容量1234567891011121314151617
价值00000000000000000
矿泉水00222222222222222
葡萄00224446666666666
西瓜0022444668881010121212

不难看出,对每次放东西进行比较:
1.如果当前容量不能装下当前物品或这两个物品,则直接继承上一个格的

2.否则,当前价值=max(当前价值,上一个的价值)

所以这道题的代码就是

#include <iostream>
using namespace std;
int t, m;
int vol[110], vau[110], dp[110][1001];
int main()
{
	cin >> t >> m;
	for (int i = 1; i <= m; i ++)
	{
		cin >> vol[i] >> vau[i];
	}
	for (int i = 1; i <= m; i ++)
	{
		for (int j = 0; j <= t; j ++)
		{
			if (vol[i] > j) dp[i][j] = dp[i - 1][j];
			else {
				dp[i][j] = max(dp[i - 1][j], dp[i - 1][j - vol[i]] + vau[i]);
			}
		}
	}
	cout << dp[m][t];
	return 0;
 } 

标签:背包,int,110,草药,采药,P1048,价值,dp
From: https://blog.csdn.net/2401_87819923/article/details/142886997

相关文章

  • 【洛谷 P1048】[NOIP2005 普及组] 采药 题解(动态规划+01背包)
    [NOIP2005普及组]采药题目描述辰辰是个天资聪颖的孩子,他的梦想是成为世界上最伟大的医师。为此,他想拜附近最有威望的医师为师。医师为了判断他的资质,给他出了一个难题。医师把他带到一个到处都是草药的山洞里对他说:“孩子,这个山洞里有一些不同的草药,采每一株都需要一些时间,每一株......
  • 题解:P10481 Sudoku
    Sudoku来自蓝书思路优化搜索顺序,位运算常数优化。优化搜索顺序数独问题的搜索很简单,“搜索状态”就是每个位置上填了什么数。在每个状态下,选择一个未填位置,检查那些填入仍能满足数独条件(合法)的数字。构成的新的局面即为该状态的“分支”。足够暴力的写法为依次对每个位置进......
  • P10480 可达性统计(拓扑,bitset 优化)
    link从数的角度来看,如果知道任意一个点能到达的点的数量,那么它的前驱节点一定也能到达,但是,只累加数的话无法处理可能存在重合点的情况。所以,考虑从集合的角度,设\(f(x)\)表示\(x\)能到达的点的集合如果\(x\)有邻点\(y_1,y_2,...,y_k\),那么\(x\)能到达的点就是它的邻点......
  • [NOIP2005 普及组] 采药
    题目描述辰辰是个天资聪颖的孩子,他的梦想是成为世界上最伟大的医师。为此,他想拜附近最有威望的医师为师。医师为了判断他的资质,给他出了一个难题。医师把他带到一个到处都是草药的山洞里对他说:“孩子,这个山洞里有一些不同的草药,采每一株都需要一些时间,每一株也有它自身的价值......
  • NOIP2005 普及:第三题 采药
    辰辰是个天资聪颖的孩子,他的梦想是成为世界上最伟大的医师。为此,他想拜附近最有威望的医师为师。医师为了判断他的资质,给他出了一个难题。医师把他带到一个到处都是草药的山洞里对他说:“孩子,这个山洞里有一些不同的草药,采每一株都需要一些时间,每一株也有它自身的价值。我会给你......
  • P1048 [NOIP2005 普及组] 采药
    ##题目描述辰辰是个天资聪颖的孩子,他的梦想是成为世界上最伟大的医师。为此,他想拜附近最有威望的医师为师。医师为了判断他的资质,给他出了一个难题。医师把他带到一个到处都是草药的山洞里对他说:“孩子,这个山洞里有一些不同的草药,采每一株都需要一些时间,每一株也有它自身的价......
  • 洛谷P1048 典型01背包问题
    写在前面的话蒟蒻在学习诸多图论算法之前,实际上没学过dp!强说是学过也是只学了01背包,今天就来温习一下……DP是啥?动态规划(DynamicProgramming,DP)是运筹学的一个分支,是......