状态写对了,代码实现出问题?
查看原帖
状态写对了,代码实现出问题?
701221
Chr0n1CleC楼主2023/2/10 19:52
#include<cstdio>

inline int read()
{
	register int ret = 0;
	register char f = 1, ch = getchar();
	while (ch < '0' || ch > '9')
		(ch == '-') ? f = 0 : 0, ch = getchar();
	while (ch >= '0' && ch <= '9')
		ret = (ret << 1) + (ret << 3) + (ch ^ 48), ch = getchar();
	return f ? ret : -ret;
}

const int N = 59;

int p[N], w[N];

inline int min(int a, int b)
{
	return a < b ? a : b;
}

int dp[N][N][2];

int main()
{
	register int n = read(), c = read(), i, len, j, k, sum = 0;
	for (i = 1;i <= n;++ i)
		p[i] = read(), w[i] = read() + w[i - 1], sum += w[i], dp[i][i][0] = dp[i][i][1] = 1e9;
	dp[c][c][0] = dp[c][c][1] = 0;
	for (len = 2;len <= n;++ len)
	{
		for (i = 1;i + len - 1 <= n;++ i)
		{
			j = i + len - 1;
			dp[i][j][0] = 
			min(dp[i + 1][j][0] + (p[i + 1] - p[i]) * (sum - w[j] + w[i]), 
				dp[i + 1][j][1] + (p[j] - p[i]) * (sum - w[j] + w[i]));
			dp[i][j][1] = 
			min(dp[i][j - 1][1] + (p[j] - p[j - 1]) * (sum - w[j - 1] + w[i - 1]), 
				dp[i][j - 1][0] + (p[j] - p[i]) * (sum - w[j - 1] + w[i - 1]));
		}
	}
	printf("%d", min(dp[1][n][0], dp[1][n][1]));
	
	return 0;
}
2023/2/10 19:52
加载中...