zoukankan      html  css  js  c++  java
  • XueXX and Chessboard(dp)

     

    题解:

    本题是DP,状态转移方程是dp[i][j]=dp[i-1][j]+dp[i][j-1],只不过要加上许多判断,最后即可求出答案,要注意输入从1开始输入,并且dp[0][1]=1,这样才能使dp[1][1]赋值为1。

    最后提交上去的时候一定不要忘了取模!!!

    并且,dp的题也要注意边界情况,比如这题是1 1 1       1 1  这样的话就要特殊处理!!!!

    AC代码:

    #include <map>
    #include <set>
    #include <list>
    #include <cmath>
    #include <queue>
    #include <stack>
    #include <bitset>
    #include <vector>
    #include <cstdio>
    #include <string>
    #include <cassert>
    #include <climits>
    #include <sstream>
    #include <cstdlib>
    #include <cstring>
    #include <iostream>
    #include <algorithm>
    using namespace std;
    
    const int INF=-1;
    typedef long long ll;
    typedef unsigned long long ull;
    #define fi first
    #define se second
    #define prN printf("
    ")
    #define SI(N) scanf("%d",&(N))
    #define SII(N,M) scanf("%d%d",&(N),&(M))
    #define SIII(N,M,K) scanf("%d%d%d",&(N),&(M),&(K))
    #define cle(a,val) memset(a,(val),sizeof(a))
    #define rep(i,b) for(int i=0;i<(b);i++)
    #define Rep(i,a,b) for(int i=(a);i<=(b);i++)
    
    int n,m,k;
    int dp[1005][1005];
    
    const int mod=1000000007;
    
    int main()
    {
        int o;
        cin>>o;
        while(o--)
        {
            cle(dp,0);
            cin>>n>>m>>k;
            int x,y;
            rep(i,k)
            {
                cin>>x>>y;
                dp[x][y]=INF;
            }
            dp[0][1]=1;
            Rep(i,1,n)
            {
                Rep(j,1,m)
                {
                    if(dp[i][j]==INF)continue;
    
                    if (dp[i-1][j]>=0&&dp[i][j-1]>=0)
                    {
                        dp[i][j]+=(dp[i-1][j]+dp[i][j-1]);
                        dp[i][j]%=mod;
                    }
                    if (dp[i-1][j]==INF&&dp[i][j-1]==INF)
                    {
                        dp[i][j]+=0;
                    }
                    if (dp[i-1][j]>=0&&dp[i][j-1]==INF)
                    {
                        dp[i][j]+=dp[i-1][j];
                        dp[i][j]%=mod;
                    }
                    if (dp[i-1][j]==INF&&dp[i][j-1]>=0)
                    {
                        dp[i][j]+=dp[i][j-1];
                        dp[i][j]%=mod;
                    }
    
                }
            }
            if (dp[n][m]==INF)
                puts("0");
            else
                printf("%d
    ",dp[n][m]);
    
        }
        return 0;
    }
  • 相关阅读:
    (十六)字段表集合
    (十五)类索引
    (十四)访问标志 Access_flags
    (一)单例模式
    (二十三)IDEA 构建一个springboot工程,以及可能遇到的问题
    (十三)class文件结构:常量池(转)
    Hive优化
    标签整理
    一些学习资料
    jstree树形菜单
  • 原文地址:https://www.cnblogs.com/s1124yy/p/5520990.html
Copyright © 2011-2022 走看看