70pts悬关求调wa#5#6#9
查看原帖
70pts悬关求调wa#5#6#9
559456
solitary_reeper楼主2024/10/31 19:09
#include<bits/stdc++.h>
using namespace std;
int n,c;
long long f[55][55][2][2];
struct node{
    int pos,w;
}a[55];
int main()
{
    ios :: sync_with_stdio(0);cin.tie(0);cout.tie(0);
    cin>>n>>c;
    for(int i=1;i<=n;i++)
    {
        cin>>a[i].pos>>a[i].w;
    }
    for(int i=0;i<=n+1;i++)
    {
        for(int j=0;j<=n+1;j++)
        {
            for(int k=0;k<=1;k++)//0表示在[i,j]的左边,1表示在[i,j]的右边
            {
                for(int l=0;l<=1;l++)//0时间1消耗
                {
                    f[i][j][k][l]=1300000;
                }
            }
        }
    }
    f[c][c][1][0]=f[c][c][1][1]=f[c][c][0][0]=f[c][c][0][1]=0;
    for(int k=1;k<n;k++)
    {
        for(int l=1;l+k-1<=n;l++)
        {
            int r=l+k-1;
            // cout<<l<<" "<<r<<"\n";
            // cout<<f[l][r][0]<<" "<<f[l][r][1]<<"\n";
            if(f[l][r+1][1][1]>(f[l][r][1][0]+a[r+1].pos-a[r].pos)*a[r+1].w+f[l][r][1][1])
            {
                f[l][r+1][1][1]=(f[l][r][1][0]+a[r+1].pos-a[r].pos)*a[r+1].w+f[l][r][1][1];
                f[l][r+1][1][0]=f[l][r][1][0]+a[r+1].pos-a[r].pos;
            }
            if(f[l][r+1][1][1]>(f[l][r][0][0]+a[r+1].pos-a[l].pos)*a[r+1].w+f[l][r][0][1])
            {
                f[l][r+1][1][1]=(f[l][r][0][0]+a[r+1].pos-a[l].pos)*a[r+1].w+f[l][r][0][1];
                f[l][r+1][1][0]=f[l][r][0][0]+a[r+1].pos-a[l].pos;
            }
            if(f[l-1][r][0][1]>(f[l][r][0][0]+a[l].pos-a[l-1].pos)*a[l-1].w+f[l][r][0][1])
            {
                f[l-1][r][0][1]=(f[l][r][0][0]+a[l].pos-a[l-1].pos)*a[l-1].w+f[l][r][0][1];
                f[l-1][r][0][0]=f[l][r][0][0]+a[l].pos-a[l-1].pos;
            }
            if(f[l-1][r][0][1]>(f[l][r][1][0]+a[r].pos-a[l-1].pos)*a[l-1].w+f[l][r][1][1])
            {
                f[l-1][r][0][1]=(f[l][r][1][0]+a[r].pos-a[l-1].pos)*a[l-1].w+f[l][r][1][1];
                f[l-1][r][0][0]=f[l][r][1][0]+a[r].pos-a[l-1].pos;
            }
            // f[l][r+1][1]=min(f[l][r+1][1],min((f[l][r][1]+a[r+1].pos-a[r].pos)*a[r+1].w+f[l][r][1],(f[l][r][0]+a[r+1].pos-a[l].pos)*a[r+1].w+f[l][r][0]));
            // f[l-1][r][0]=min(f[l-1][r][0],min((f[l][r][1]+a[r].pos-a[l-1].pos)*a[l-1].w+f[l][r][1],(f[l][r][0]+a[l].pos-a[l-1].pos)*a[l-1].w+f[l][r][0]));
        }
    }
    cout<<min(f[1][n][0][1],f[1][n][1][1])<<"\n";
    return 0;
}
2024/10/31 19:09
加载中...