码迷,mamicode.com
首页 > 其他好文 > 详细

SGU 222.Little Rooks

时间:2015-03-07 15:21:15      阅读:154      评论: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
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!