20分的超短代码,求大神看看哪错了

#include<bits/stdc++.h>
using namespace std;
int h[1000][1000],n;
long long int mem[1000][1000]={0};
int dp(int x,int y)
{ 
    if(mem[x][y]!=0) return mem[x][y];
    if(x==n&&y==1) return h[x][y];
    mem[x][y]=999999999;
    if(x==n&&y!=1&&y!=x) mem[x][y]=min(dp(x,y-1),dp(x,y+1))+h[x][y];
    else if(x==n&&y==x) mem[x][y]=min(dp(x,y-1),dp(x,1))+h[x][y];
    else if((y!=1&&y!=x)) mem[x][y]=min(min(dp(x+1,y+1),dp(x+1,y)),min(dp(x,y-1),dp(x,y+1)))+h[x][y];
    else if(y==1&&x!=1) mem[x][y]=min(min(min(dp(x+1,y+1),dp(x+1,y)),min(dp(x,x),dp(x,y+1))),dp(x+1,x+1))+h[x][y];
    else if(y==x&&x!=1) mem[x][y]=min(min(min(dp(x+1,y+1),dp(x+1,y)),min(dp(x,y-1),dp(x,1))),dp(x+1,1))+h[x][y];
    else if(x==1&&y==1) mem[x][y]=min(dp(2,1),dp(2,2))+h[x][y];
    return mem[x][y];
}
int main()
{
    cin>>n;
    for(int i=1;i<=n;i++)
    for(int j=1;j<=i;j++)
    cin>>h[i][j];
    cout<<dp(1,1);
    return 0;
}

0 条评论

目前还没有评论...

信息

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