前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >洛谷P1048

洛谷P1048

作者头像
嘉嘉123
发布2022-12-14 20:01:11
2810
发布2022-12-14 20:01:11
举报
文章被收录于专栏:嘉嘉的博客

一道DP(动态规划)、01背包的模板题(么?)。

洛谷链接P1048

DP是什么?

DP是一种“用空间换时间”的算法,它将已经算好的答案存下来(子问题),再从父问题获取子问题的答案。

此题解释

给出采每种药花费的时间和价值,问在给定的时间内最多采药多少钱?

怎么写?

对于每种药,遍历那个f,假如装不进去或者装进去费空间的要死那就抄上一个;假如可以的话那就装进去!

代码!

代码语言:javascript
复制
#include<iostream>
using namespace std;
int main() {
	ios::sync_with_stdio(false);
	cin.tie(nullptr);
	int t, n;
	cin >> t >> n;
	int v[n + 1]; //价值
	int w[n + 1]; //时间
	int f[101][1001];

	for (int i = 1; i <= n; i++) cin >> w[i] >> v[i];

	for (int i = 1; i <= n; i++)
		for (int j = t; j >= 0; j--) {
			if (j < w[i])
				f[i][j] = f[i - 1][j]; //抄上一个(装不进去)
			else if ( f[i - 1][j] > f[i - 1][j - w[i]] + v[i] )
				f[i][j] = f[i - 1][j]; //抄上一个(装进去费空间)
			else
				f[i][j] = f[i - 1][j - w[i]] + v[i]; //装进去!
		}

	cout << f[n][t];
	return 0;
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-09-18,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • DP是什么?
  • 此题解释
  • 怎么写?
  • 代码!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档