zoukankan      html  css  js  c++  java
  • dp第一题

    因为对内分工的原因,我的dp一直很弱,最近觉得dp非常有趣,于是开始狂刷dp了。

    #include <iostream>
    #include <stdio.h>
    #include <string.h>
    using namespace std;
    int dp[1051][1051];
    int main()
    {
        int n,m;
        while(scanf("%d%d",&n,&m)!=EOF)
        {
            memset(dp,0,sizeof(dp));
            for(int i=1;i<=n;i++)
                dp[i][1]=1;
            for(int j=1;j<=m;j++)
                dp[1][j]=1;
            for(int i=2;i<=n;i++)
                for(int j=2;j<=m;j++)
                {
                    if(i==n && j==m)
                    {
                        dp[i][j]=(dp[i-1][j]+dp[i][j-1])%10007;
                        break;
                    }
                    else
                    {
                        dp[i][j]=(dp[i-1][j]+dp[i][j-1])%10007;
                    }
                }
            cout << dp[n][m]%10007 <<endl;
        }
        return 0;
    }

    已知一个帅哥(zlgg)要从学校走回家,地图是N*M的网格状,他的学校在左上角,家在右下角,但他只能向右或向下走,问:他有多少种不同的走法回家?

    状态:dp[i][j]代表走到网格i*j时有多少种不同走法;

    状态转移方程:dp[i][j]=dp[i-1][j]+dp[i][j-1];

  • 相关阅读:
    JUnit4.13环境配置
    OO第5-7次作业总结
    电梯的一点浅优化
    C++变量作用域、生存期、存储类别
    最后一次OO博客
    OO第三次总结
    OO第二次总结
    OO第一次总结
    POJ3934
    POJ刷题计划
  • 原文地址:https://www.cnblogs.com/markliu/p/2496714.html
Copyright © 2011-2022 走看看