洛谷P1048

2022-12-14 20:01:11 浏览数 (1)

一道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;
}

0 人点赞