zoukankan      html  css  js  c++  java
  • XDU 1056

    解法一:简单搜索肯定TLE,只是单纯的想写一发搜索练练手

    #include<cstdio>
    #include<cstring>
    #define maxn 1005
    using namespace std;
    int i,j,k,n,ans;
    int c[maxn][maxn];
    int dir[2][2]={{0,1},{1,0}};
    bool can(int i,int j)
    {
        if(i<0||j<0||i>n||j>n||i<j||c[i][j]!=0)
            return false;
        return true;
    }
    void dfs(int i,int j)
    {
        if(i==n&&j==n)
            ans++;
        else{ 
            if(can(i,j)){
                c[i][j]=1;
                for(int k=0;k<2;k++){
                    int ni=i+dir[0][k];
                    int nj=j+dir[1][k];
                    dfs(ni,nj); 
                }
            }
            else
                return ;
        }
        c[i][j]=0;
    //如果当前位置可以走 但是它通往的两个方向都不能走 则不走这一步 还原为0 
    }
    int main()
    {
        while(scanf("%d",&n)!=EOF)
        {
            ans=0;
            memset(c,0,sizeof(c));
            dfs(0,0);
            printf("%d
    ",ans%10007);
        }
        return 0;
     } 

    解法2:动态规划

    //dp[i][j]表示从(0,0)到达(i,j)有多少种 
    //dp[i][j]=dp[i-1][j]+dp[i][j-1] 
    #include<cstdio>
    #include<cstring>
    #define maxn 1005
    using namespace std;
    int dp[maxn][maxn]; 
    #define N 10007
    int main()
    {
        int n;
        dp[1][1]=1;
        for(int i=1;i<maxn;i++){
            dp[i][0]=1; 
        }
        for(int i=1;i<maxn;i++){
            for(int j=1;j<=i;j++){
                dp[i][j]=dp[i-1][j]%N+dp[i][j-1]%N;
            }
        }
        while(scanf("%d",&n)!=EOF)
            printf("%d
    ",dp[n][n]%N);
        return 0;
     } 
  • 相关阅读:
    查看资源加载各环节具体耗时的利器
    WebStorm 格式化代码快捷键
    Android 如何使edittext默认失去焦点
    html语义化练习易牛课堂代码
    html网页练习豆瓣网
    HTML前期学习总结
    视频课阶段基础知识总结
    MQ、JMS 关系的理解
    Jvm参数配置
    Java泛型
  • 原文地址:https://www.cnblogs.com/freinds/p/6292168.html
Copyright © 2011-2022 走看看