查了半天没看出来,有人能帮我查一下吗 ,谢谢
查看原帖
查了半天没看出来,有人能帮我查一下吗 ,谢谢
119552
梦理乾坤楼主2020/7/28 17:13
#include <bits/stdc++.h>

using namespace std;

const int N = 100;

int f[N][N], g[N][N], a[N], sum[N], b[N];

int main()
{
    memset(f, 0x3f, sizeof f);

    int n, c;
    cin >> n >> c;

    for (int i = 1; i <= n; i ++ )
    {
        cin >> a[i] >> b[i];
        sum[i] = b[i] + sum[i - 1];
    }

    f[c][c] = g[c][c] = 0;
    
    for (int l = 2; l <= n; l ++ )
        for (int i = 1; i + l - 1 <= n; i ++ )
        {
            int j = i + l - 1;
            f[i][j] = min(f[i + 1][j] + (a[i + 1] - a[i]) * (sum[i] + sum[n] - sum[j]), 
            g[i + 1][j] + (a[j] - a[i]) * (sum[i] + sum[n] - sum[j]));
            g[i][j] = min(f[i][j - 1] + (a[j] - a[i]) * (sum[i - 1]  + sum[n] - sum[j - 1]), 
            g[i][j - 1] + (a[j] - a[j - 1]) * (sum[i - 1] + sum[n] - sum[j - 1]));
        }
    
    int ans = min(f[1][n], g[1][n]);
    cout << ans << endl;

    return 0;
}
2020/7/28 17:13
加载中...