首页 > 其他 > 详细

SGU 222.Little Rooks

时间:2015-03-07 15:21:08      阅读:245      评论:0      收藏:0      [点我收藏+]

题意:

  求在n*n(n<10)的棋盘上放k个车(水平竖直行走)的方案数。

 

 

 


 

Solution

  SGU220的简化版。直接DP

  显然当k>n时,ans=0;

  f[i][j]代表在前n行放了j个棋子.

  转移方程

  f[i][j]=f[i-1][j]+f[i-1][j-1]*(n-j+1);

 

技术分享
#include <iostream>
using namespace std;
int f[11][11], n, m, ans;
int main() {
    ios::sync_with_stdio (0);
    cin >> n >> m;
    if (m <= n) {
        f[0][0]=1;
        for (int j = 0; j <= m; j++)
            for (int i = 1; i <= n; i++) {
                if (j > 0) f[i][j] = f[i - 1][j - 1] * (n - j + 1) + f[i-1][j];
                if (j == m) ans += f[i][j];
            }
        if (m == 0) ans = 1;
    }
    cout << ans << endl;
}
Code

 

SGU 222.Little Rooks

原文:http://www.cnblogs.com/keam37/p/4320238.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!