求大神看看怎么错了。。

#include<cstdio>
#include<cstdlib>
#include<cmath>
#include<cstring>
int n,a[1005][1005];
int dp[1005][1005];
int min4(int a,int b,int c,int d)
{
int mi=1e8;
if(a<mi) mi=a;
if(b<mi) mi=b;
if(c<mi) mi=c;
if(d<mi) mi=d;
return mi;
}
int min3(int a,int b,int c)
{
int mi=1e8;
if(a<mi) mi=a;
if(b<mi) mi=b;
if(c<mi) mi=c;
return mi;
}
int min2(int a,int b)
{
int mi=1e8;
if(a<mi) mi=a;
if(b<mi) mi=b;
return mi;
}
int main()
{
scanf("%d",&n);
for(int i=1;i<=n;i++)
for(int j=1;j<=i;j++)
scanf("%d",&a[i][j]);
for(int i=0;i<=n+1;i++)
for(int j=0;j<=i+1;j++)
dp[i][j]=1e9;
dp[1][1]=a[1][1];
for(int i=2;i<=n;i++)
{
for(int j=1;j<=i;j++)
{
if(j==1) dp[i][j]=min2(dp[i-1][i-1],dp[i-1][j])+a[i][j];
else if(j==i) dp[i][j]=min4(dp[i-1][i-1],dp[i-1][1],dp[i][j-1],dp[i][1])+a[i][j];
else dp[i][j]=min3(dp[i-1][j-1],dp[i-1][j],dp[i][j-1])+a[i][j];
}
for(int j=i;j>=1;j--)
{
if(j==1) dp[i][j]=min3(dp[i][j],dp[i][i]+a[i][j],dp[i][j+1]+a[i][j]);
if(j>1&&j<i) dp[i][j]=min2(dp[i][j],dp[i][j+1]+a[i][j]);
}
}
/*for(int i=1;i<=n;i++)
{
for(int j=1;j<=i;j++)
printf("%d ",dp[i][j]);
printf("\n");
}*/
printf("%d\n",dp[n][1]);
return 0;
}

2 条评论

  • 1

信息

ID
1006
难度
7
分类
动态规划 点击显示
标签
递交数
9118
已通过
2089
通过率
23%
被复制
29
上传者