蒟蒻暴力 dp 写挂了 0pts 求调 qwq
查看原帖
蒟蒻暴力 dp 写挂了 0pts 求调 qwq
719978
DYYqwq楼主2024/1/19 19:28

rt。

下了大样例但是自己完全调不出来 qwq

#include<bits/stdc++.h>
#define int long long
using namespace std;
int n , m , A , B , C , x[1000010] , y[1000010] , p[1000010] , q[1000010] , dp[1000010] , path[1000010];
signed main()
{
	memset(dp , 0x7f , sizeof(dp));
	scanf("%lld%lld%lld%lld%lld" , &n , &m , &A , &B , &C);
	for(int i = 1 ; i <= m ; i ++)
		scanf("%lld%lld%lld%lld" , &x[i] , &y[i] , &p[i] , &q[i]);
	for (int i = 1 ; i <= m ; i ++)
	{
		if(x[i] == 1)
			dp[i] = min(dp[i] , A * p[i] * p[i] + B * p[i] + C);
	}
	for(int i = 1 ; i <= m ; i ++)
	{
		for(int j = 1 ; j < i ; j ++){
			int tmp = p[i] - q[j];
			if(x[i] == y[j] && q[j] <= q[i])
			{
				// int qwq = dp[i];
				dp[i] = min(dp[i] , dp[j] + A * tmp*tmp + B * tmp + C);
				// if(qwq > dp[i]) path[i] = j;
			}
		}
	}
	int ans = 1e18;
// 	for(int i = 1 ; i <= m ; i ++) printf("%lld %lld\n" , dp[i] + q[i] , path[i]);
	for(int i = 1 ; i <= m ; i ++) if(y[i] == n) ans = min(ans , dp[i] + q[i]);
	printf("%lld\n" , ans);
	return 0;
}
2024/1/19 19:28
加载中...