社区讨论

11点超空间 求dalao帮帮

P2925[USACO08DEC] Hay For Sale S参与者 3已保存回复 4

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
4 条
当前快照
1 份
快照标识符
@lo85q4e4
此快照首次捕获于
2023/10/27 13:12
2 年前
此快照最后确认于
2023/10/27 13:12
2 年前
查看原帖
CPP
#include<bits/stdc++.h>
using namespace std;

long long bag, n, w[10010], dp[5100][50000];

int lbag(int index, int bag)
{
	if(dp[index][bag] != -1)
	return dp[index][bag];
	int ans = 0;
	if(bag < 0)
	ans = -1;
	else
	if(index == n + 1)
	ans = 0;
	else{
	int p1 = lbag(index + 1, bag);
	int p2 = 0;
	int next = lbag(index + 1, bag - w[index]);
	if(next != -1)
	p2 = w[index] + next;
	ans = max(p1, p2);
}
	dp[index][bag] = ans;
	return ans;
}

long long tb()
{
	for(int index = n;index >= 1;index--)
	{
		for(int rest = 0;rest <= bag;rest++)
		{
			long long p1 = dp[index + 1][rest];
			long long p2 = 0;
			if(rest - w[index] >= 0 && w[index] + dp[index + 1][rest - w[index]] <= bag)
			p2 = w[index] + dp[index + 1][rest - w[index]];
			dp[index][rest] = max(p1, p2);
			if(dp[index][rest] == bag)
			return dp[index][rest];
		}
	}
	return dp[1][bag];
}

int main()
{
//	memset (dp, -1, sizeof (dp));
	cin >> bag >> n;
	for(int i = 1;i <= n;i ++)
	cin >> w[i];
//	cout << lbag(1, bag) << endl;
//	memset (dp, 0, sizeof (dp));
	long long sum = tb();
	cout << sum;
	return 0;
}

回复

4 条回复,欢迎继续交流。

正在加载回复...