我是蒟蒻,样例都过不了,还查不出错。各位大佬帮帮孩子吧!orz谢谢orz谢谢orz谢谢orz谢谢orz谢谢
#include<bits/stdc++.h>
using namespace std;
const int N = 2000+1;
int n,c;
int a[N],p[N],dp[N][N][2],s[N];
#define dist(i,j) abs(a[i]-a[j])
#define cal(i,j) s[n]-s[j]+s[i-1]
inline int min(int x,int y){return x<y?x:y;}
int main()
{
cin>>n>>c;
for(int i=1;i<=n;++i)
{
cin>>a[i]>>p[i];
s[i]=s[i-1]+p[i];
}
for(int i=0;i<=n;++i)
for(int j=0;j<=n;++j)
dp[i][j][1]=1e9,dp[i][j][0]=1e9;
dp[c][c][1]=0,dp[c][c][0]=0;
for(int len=2;len<=n;++len)
{
for(int i=1;i+len-1<=n;++i)
{
int j=i+len-1;
dp[i][j][0]=min(dp[i+1][j][0]+dist(i,i+1)*cal(i+1,j),dp[i+1][j][1]+dist(i,j)*cal(i+1,j));
dp[i][j][1]=min(dp[i][j-1][1]+dist(j-1,j)*cal(i,j-1),dp[i][j-1][0]+dist(i,j)*cal(i,j-1));
// printf("dp[%d][%d][0]=min(%d+%d*%d,%d+%d*%d)=%d\n",i,j,dp[i+1][j][0],dist(i,i+1),cal(i+1,j),dp[i+1][j][1],dist(i,j),cal(i+1,j),dp[i][j][0]);
// printf("dp[%d][%d][1]=min(%d+%d*%d,%d+%d*%d)=%d\n",i,j,dp[i][j-1][1],dist(j-1,j),cal(i,j-1),dp[i][j-1][0],dist(i,j),cal(i,j-1),dp[i][j][1]);
}
}
cout<<min(dp[1][n][0],dp[1][n][1]);
}