为什么连最朴素的方法都过不了Hack
查看原帖
为什么连最朴素的方法都过不了Hack
347839
Daniel_7216楼主2022/7/15 10:59

Rt,本来想先写个朴素的方法来验证推的式子对不对,但是Hack数据没有TLE,而是WA了,请大佬看一下是不是我的方程推错了,感激不尽~

#include <cstdio>
#include <iostream>
#define int long long
using namespace std;
const int maxn = 1e6 + 1;
const int inf = 9223372036854775807ll;
int n, k = 1, dp[maxn], sum1[maxn], sum2[maxn];
struct node{
	int x, p, c;	
}a[maxn];
signed main(){
	a[0].x = 0;
	a[0].p = 0;
	a[0].c = 0;
	scanf("%lld", &n);
	for (int i = 1; i <= n; i++){
		scanf("%lld%lld%lld", &a[i].x, &a[i].p, &a[i].c);
		sum1[i] = sum1[i - 1] + a[i].p;
		sum2[i] = sum2[i - 1] + sum1[i - 1] * (a[i].x - a[i - 1].x);
		dp[i] = inf;
	}
	for (int i = 1; i <= n; i++){
		for (int j = k; j <= i; j++){
		    if (dp[j - 1] + a[i].c + sum2[i] - sum2[j - 1] - sum1[j - 1] * (a[i].x - a[j - 1].x) <= dp[i]){
		        dp[i] = dp[j - 1] + a[i].c + sum2[i] - sum2[j - 1] - sum1[j - 1] * (a[i].x - a[j - 1].x);
		        k = j;
		    }
			
		}
	}
	printf("%lld", dp[n]);
	return 0;
}
2022/7/15 10:59
加载中...