【動(dòng)態(tài)規(guī)劃】過(guò)河卒
思路
思路很簡(jiǎn)單,到達(dá)某個(gè)位置的路徑的條數(shù)一定等于它上方和它右方兩格的路徑數(shù)之和,DP即可。
但實(shí)際編碼坑點(diǎn)重重,最重要的一點(diǎn)是:數(shù)組總TMD越界!!!煩......如此水的一道題都用了本蒟蒻40分鐘,不敢直視自己的能力QAQ,只能都在墻后瑟瑟發(fā)抖......
Code
#include<iostream>
#include<cstdio>
#include<string>
#include<vector>
#include<algorithm>
#include<cstdlib>
#include<cmath>
#include<stack>
#include<map>
using namespace std;
int a[16][16],dp[16][16];
int main()
{
int i,j,n,m,x,y;
cin>>n>>m>>x>>y;
for(i=0;i<=n;i++)
for(j=0;j<=m;j++)
a[i][j]=1;
a[x][y]=0;
a[x-1][y-2]=0;
a[x-2][y-1]=0;
a[x-2][y+1]=0;
a[x-1][y+2]=0;
a[x+1][y-2]=0;
a[x+2][y-1]=0;
a[x+2][y+1]=0;
a[x+1][y+2]=0;
for(i=0;i<=n;i++){if(a[i][0]==0)break;dp[i][0]=1;}
for(j=0;j<=m;j++){if(a[0][j]==0)break;dp[0][j]=1;}
for(i=1;i<=n;i++)
for(j=1;j<=m;j++)
{
if(a[i][j]==1)
{
dp[i][j]=dp[i-1][j]+dp[i][j-1];
}
}
cout<<dp[n][m]<<endl;
/*
for(i=0;i<=n;i++)
{
for(j=0;j<=m;j++)
cout<<a[i][j]<<" ";
cout<<endl;
}
cout<<endl;
for(i=0;i<=n;i++)
{
for(j=0;j<=m;j++)
cout<<dp[i][j]<<" ";
cout<<endl;
}
*/
return 0;
}

浙公網(wǎng)安備 33010602011771號(hào)