zoukankan      html  css  js  c++  java
  • HDU-6114

    車是中国象棋中的一种棋子,它能攻击同一行或同一列中没有其他棋子阻隔的棋子。一天,小度在棋盘上摆起了许多車……他想知道,在一共N×M个点的矩形棋盘中摆最多个数的車使其互不攻击的方案数。他经过思考,得出了答案。但他仍不满足,想增加一个条件:对于任何一个車A,如果有其他一个車B在它的上方(車B行号小于車A),那么車A必须在車B的右边(車A列号大于車B)。 

    现在要问问你,满足要求的方案数是多少。
    Input第一行一个正整数T,表示数据组数。 

    对于每组数据:一行,两个正整数N和M(N<=1000,M<=1000)。Output对于每组数据输出一行,代表方案数模1000000007(1e9+7)。Sample Input
    1
    1 1
    Sample Output
    1

    题解:

    这个题建议读者看一下8皇后这个经典题,估计这个就回会了;典型的DP问题。求出动态转移方程

    DP[i][j]=DP[i][j-1]+DP[i-1][j-1];

    AC代码为:

    #include<iostream>
    #include<cstdio>
    #include<algorithm>


    using namespace std;
    const int mod = 1e9 + 7;
    long long dp[1005][1005];


    int main()
    {
    for (int i = 1; i<1005; i++)
    {
    dp[1][i] = i;
    }


    for (int i = 2; i<1005; i++)
    {
    for (int j = i; j<1005; j++)
    {
    if (i == j)
    {
    dp[i][j] = 1;
    }
    else
    {
    dp[i][j] = (dp[i][j - 1] + dp[i - 1][j - 1]) % mod;
    }
    }
    }
    int T;
    cin >> T;
    while (T--)
    {
    int N, M;
    cin >> N >> M;
    if (N>M)
    {
    swap(N, M);
    }


    cout << dp[N][M] % mod << endl;
    }
    return 0;
    }

  • 相关阅读:
    【Demo 0087】线程创建使用消亡
    【Demo 0083】查看进程启动时间
    【Demo 0080】进程
    关于.vhd文件的一个问题
    此服务器上的时间与主域控制器的时间不一致解决方法
    centos5.6下安装mysql5.5.16
    杂谈,入社见闻录
    Oracle 11g学习笔记(1)
    Oracle 11g学习笔记(2)
    转:如何彻底卸载MySQL
  • 原文地址:https://www.cnblogs.com/csushl/p/9386607.html
Copyright © 2011-2022 走看看