题目链接
题意:从(1,1)走到(n,m),不能走行数和列数都是偶数的,求有多少种方案。
思路:深搜+记忆搜索
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
int n,m;
int d[2][2]= {{1,0},{0,1}};
int g[50][50];
int dfs(int x,int y)
{
if(x&1||y&1)
{
if(g[x][y])
return g[x][y];
if(x<n)
g[x][y]+=dfs(x+1,y);
if(y<m)
g[x][y]+=dfs(x,y+1);
}
return g[x][y];
}
int main()
{
cin>>n>>m;
memset(g,0,sizeof(g));
g[n][m]=n&1||m&1;
cout<<dfs(1,1)<<endl;
return 0;
}
思路:动态规划
#include <iostream>
#include <algorithm>
#include <cstring>
using namespace std;
int n,m;
int dp[50][50];
int main()
{
cin>>n>>m;
memset(dp,0,sizeof(dp));
int i,j;
for(i=1;i<=n;i++)
dp[i][1]=1;
for(i=1;i<=m;i++)
dp[1][i]=1;
for(i=2;i<=n;i++)
for(j=2;j<=m;j++)
if(i&1||j&1)
dp[i][j]=dp[i-1][j]+dp[i][j-1];
cout<<dp[n][m]<<endl;
return 0;
}