社区讨论

玄关,求条

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

讨论操作

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

当前回复
7 条
当前快照
1 份
快照标识符
@m49wsfby
此快照首次捕获于
2024/12/04 21:13
去年
此快照最后确认于
2024/12/04 21:16
去年
查看原帖
CPP
#include<bits/stdc++.h>
using namespace std;

int n, m, q[61], p[61], dp[4001];
vector<int> v[61];

int main(){
	scanf("%d%d", &n, &m);
	n /= 10;
	for(int i = 1; i <= m; i++){
		int c;
		scanf("%d%d%d", &p[i], &q[i], &c);
		q[i] *= p[i];
		p[i] /= 10;
		if(c == 0){
			v[i].push_back(i);
		}else{
			v[c].push_back(i);
		}
	}
	for(int i = 1; i <= m; i++){
		if(v[i].size() != 0){
			for(int j = n; j >= 0; j--){
				if(v[i].size() >= 1){
					int x = v[i][0];
					if(j >= p[x])
					dp[j] = max(dp[j], dp[j - p[x]] + q[x]);
					if(v[i].size() >= 2){
						int x1 = v[i][1];
						if(j >= (p[x] + p[x1])){
							dp[j] = max(dp[j], dp[j - p[x] - p[x1]] + q[x] + q[x1]);
						}
						if(v[i].size() >= 3){
							int x2 = v[i][2];
							if(j >= (p[x] + p[x1] + p[x2])){
								dp[j] = max(dp[j], dp[j - p[x] - p[x1] - p[x2]] + q[x] + q[x1] + q[x2]);
							}
						}
					}
				}
			}
		}
	}
	printf("%d\n", dp[n]);
}
玄关,求条

回复

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

正在加载回复...