社区讨论

救救孩子吧

P1064[NOIP 2006 提高组] 金明的预算方案参与者 2已保存回复 3

讨论操作

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

当前回复
3 条
当前快照
1 份
快照标识符
@lobyhh5u
此快照首次捕获于
2023/10/30 05:01
2 年前
此快照最后确认于
2023/11/04 10:17
2 年前
查看原帖
CPP
#include <bits/stdc++.h>
#define MAXM 65
#define MAXN 32005
#define child c[t[i]][k]
using namespace std;
int m, n, top;
long long w[MAXM], v[MAXM], dp[MAXN];
int t[MAXM];
vector<int> c[MAXM];
int main() {
	cin >> n >> m;
	for(int i = 1; i <= m; i++) {
		int f;
		cin >> w[i] >> v[i] >> f;
		if(!f)
			t[top++] = i;
		else
			c[f].push_back(i);
	}
	for(int i = 0; i < top; i++)
		for(int j = n; j >= w[t[i]]; j--) {
			if(j-w[t[i]] >= 0) {
				dp[j] = max(dp[j], dp[j-w[t[i]]]+w[t[i]]*v[t[i]]);
				for(int k = 0; k < c[t[i]].size(); k++)
					if(j-w[t[i]]-w[child] >= 0)
						dp[j] = max(dp[j], dp[j-w[child]]+w[child]*v[child]);
				if(c[t[i]].size() == 2 && j-w[t[i]]-w[c[t[i]][0]]-w[c[t[i]][1]] >= 0)
					dp[j] = max(dp[j], dp[j-w[t[i]]-w[c[t[i]][0]]-w[c[t[i]][1]]]+w[c[t[i]][0]]*v[c[t[i]][0]]+w[c[t[i]][1]]*v[c[t[i]][1]]);
						
			}
		}
	cout << dp[n];
	return 0;
}

回复

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

正在加载回复...