- 晴天小猪历险记之Hill
- 2017-01-28 12:49:19 @
#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 条评论
目前还没有评论...