最后一个点WA,100分未通过,求hack数据找错,求助神犇
查看原帖
最后一个点WA,100分未通过,求hack数据找错,求助神犇
950799
Chiesl楼主2023/8/28 10:06

这题不让下数据qwq 代码如下:

#include<bits/stdc++.h>
using namespace std;
int f[10002];
int v[250002], w[250002];
int n1;
void pre (int vv, int ww, int cc) {
	int num = 1;
	while (cc > num) {
		n1++;
		w[n1] = ww * num, v[n1] = vv * num;
		cc -= num;
		num <<= 1;
	}
	n1++;
	w[n1] = ww * cc, v[n1] = vv * cc;
}
int main () {
	int n, m, c;
	memset(f, 0xcf, sizeof(f));
	f[0] = 0;	
	scanf("%d%d%d", &n, &m, &c);
	int v1, w1, c1;
	for (int i = 1; i <= n; i++) {
		scanf("%d%d%d", &v1, &w1, &c1);
		if (v1 * c1 > c) {
			for (int j = v1; j <= c1; j++) {
				f[j] = max(f[j], f[j - v1] + w1);
			}
			continue;
		}
		pre(v1, w1, c1);
	}
	for (int i = 1; i <= n1; i++) {
		for (int j = c; j >= v[i]; j--) {
			f[j] = max(f[j], f[j - v[i]] + w[i]);
		}
	}	
	int a, b, d;
	for (int i = 1; i <= m; i++) {
		scanf("%d%d%d", &a, &b, &d);
		for (int j = c; j >= 0; j--) {
			for (int k = 0; k <= j; k++) {
				f[j] = max(f[j], f[j - k] + a * k * k + b * k + d);
			}
		}
	}
	printf("%d", f[c]);
	return 0;
}
2023/8/28 10:06
加载中...