UVaLive 7360 Run Step (排列组合,枚举)
题意:给定一个数 n ,表示一共有 n 步,然后你可以迈一步也可以迈两步,但是左腿和右腿的一步和两步数要一样,并且两步数不小于一步数,问你有多少种方式。
析:虽然是排列组合,但还是不会做。。。。。水啊。
思路是先分开算,先算左腿的,再算右腿的,对左腿先枚举2步的,然后再算一步的,主要是这个怎么算,我就迷茫了,。。。。
其实并不难,我们先假设左腿有 i 个1步的和 j 个两步的,那么组合数有多少呢?很明显么,就是C(i+j, i)么,就是找 i 位置给 i。
那么剩下的就简单了。
代码如下:
#pragma comment(linker, "/STACK:1024000000,1024000000")
#include <cstdio>
#include <string>
#include <cstdlib>
#include <cmath>
#include <iostream>
#include <cstring>
#include <set>
#include <queue>
#include <algorithm>
#include <vector>
#include <map>
#include <cctype>
#include <stack>
using namespace std; typedef long long LL;
typedef pair<int, int> P;
const int INF = 0x3f3f3f3f;
const double inf = 0x3f3f3f3f3f3f;
const double PI = acos(-1.0);
const double eps = 1e-8;
const int maxn = 50 + 5;
const int mod = 1e9 + 7;
const char *mark = "+-*";
const int dr[] = {-1, 0, 1, 0};
const int dc[] = {0, 1, 0, -1};
int n, m;
inline bool is_in(int r, int c){
return r >= 0 && r < n && c >= 0 && c < m;
}
inline int Min(int a, int b){ return a < b ? a : b; }
inline int Max(int a, int b){ return a > b ? a : b; }
LL c[maxn][maxn]; void init(){
for(int i = 0; i < 52; ++i) c[i][0] = 1;
for(int i = 0; i < 52; ++i)
for(int j = 1; j <= i; ++j)
c[i][j] = c[i-1][j] + c[i-1][j-1];
} LL solve(){
int t = n/2;
int i = t/2;
LL ans = 0;
while(i >= t - 2*i){
int j = t - 2 * i;
ans += c[i+j][i] * c[i+j][j];
--i;
}
return ans;
} int main(){
init();
int T; cin >> T;
while(T--){
scanf("%d %d", &m, &n);
printf("%d ", m);
printf("%lld\n", solve());
}
return 0;
}
UVaLive 7360 Run Step (排列组合,枚举)的更多相关文章
- UVa 12712 && UVaLive 6653 Pattern Locker (排列组合)
		
题意:给定 一个n * n 的宫格,就是图案解锁,然后问你在区间 [l, r] 内的所有的个数进行组合,有多少种. 析:本来以为是数位DP,后来仔细一想是排列组合,因为怎么组合都行,不用考虑实际要考虑 ...
 - HDU 5816 状压DP&排列组合
		
---恢复内容开始--- Hearthstone Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java ...
 - leetcode-Combinations 复习复习排列组合
		
Combinations 题意: 根据给定的n和k,生成从1到n范围内长度为k的排列组合 示例: n=4 k=2 [[1, 2], [1, 3], [1, 4], [2, 1], [2, 3], [2 ...
 - HDU 4045 Machine scheduling (组合数学-斯特林数,组合数学-排列组合)
		
Machine scheduling Time Limit: 5000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Other ...
 - 排列组合+组合数取模 HDU 5894
		
// 排列组合+组合数取模 HDU 5894 // 题意:n个座位不同,m个人去坐(人是一样的),每个人之间至少相隔k个座位问方案数 // 思路: // 定好m个人 相邻人之间k个座位 剩下就剩n-( ...
 - Day4:T3搜索 T4数学题排列组合
		
T3:搜索 很出名的题吧,费解的开关 同T2一样也是一题很考思考的 附上题解再解释吧: 对于每个状态,算法只需要枚举第一行改变哪些灯的状态,只要第一行的状态固定了,接下来的状态改变方法都是唯一的:每一 ...
 - 数组排列组合问题——BACKTRACKING
		
BACKTRACKING backtracking(回溯法)是一类递归算法,通常用于解决某类问题:要求找出答案空间中符合某种特定要求的答案,比如eight queens puzzle(将国际象棋的八个 ...
 - 【BZOJ】2111: [ZJOI2010]Perm 排列计数   计数DP+排列组合+lucas
		
[题目]BZOJ 2111 [题意]求有多少1~n的排列,满足\(A_i>A_{\frac{i}{2}}\),输出对p取模的结果.\(n \leq 10^6,p \leq 10^9\),p是素数 ...
 - 蓝桥杯   问题  1110:   2^k进制数    (排列组合+高精度巧妙处理)
		
题目链接 题目描述 设r是个2^k 进制数,并满足以下条件: (1)r至少是个2位的2^k 进制数. (2)作为2^k 进制数,除最后一位外,r的每一位严格小于它右边相邻的那一位. (3)将r转换为2 ...
 
随机推荐
- asp.net正则表达式过滤标签和数据提取
			
无论什么语言,正则表达式的处理方法都是非常灵活.高效的,尤其是对某些字符串的抓取.过滤方面,更显其优势. 正则表达式的写法通常比较简单,几行短代码便能轻松完成看似很复杂的事情,更值得称赞的是,它的执行 ...
 - fmri降噪,利用spatial+temporal信息
			
1.基于小波+高斯模型 <SPATIOTEMPORAL DENOISING AND CLUSTERING OF FMRI DATA>
 - Java 单元测试(Junit)
			
在有些时候,我们需要对我们自己编写的代码进行单元测试(好处是,减少后期维护的精力和费用),这是一些最基本的模块测试.当然,在进行单元测试的同时也必然得清楚我们测试的代码的内部逻辑实现,这样在测试的时候 ...
 - Android桌面快捷方式那些事与那些坑
			
原文来自http://blog.zanlabs.com/2015/03/14/android-shortcut-summary/ 将近二个多月没写博客了.之前一段时间一直在搞红包助手,就没抽时间写博客 ...
 - acdream 1056 (黑白染色)
			
题意:给你一些关系,每个关系是两只马的名字,表示这两个马不能在一个分组里,问你能否将这些马分成两组. 黑白染色,相邻的点染不同颜色.bfs搞即可,水题. /* * this code is made ...
 - 有关SQLite的substr函数的笔记
			
官方参考文档:SQLite Query Language: Core Functions http://www.sqlite.org/lang_corefunc.html 测试SQL语句: ,) AS ...
 - 【转】发布python的包至pypi服务器
			
[原文链接]http://yejinxin.github.io/distribute-python-packages-to-pypi-server/ 使用pip或easy_install可以管理和安装 ...
 - DataSet DataTable操作
			
DataSet ds = new DataSet(); DataTable dt = new DataTable("OrderList"); ...
 - 最短路+线段交 POJ 1556 好题
			
// 最短路+线段交 POJ 1556 好题 // 题意:从(0,5)到(10,5)的最短距离,中间有n堵墙,每堵上有两扇门可以通过 // 思路:先存图.直接n^2来暴力,不好写.分成三部分,起点 终 ...
 - MFC 解析xml文件
			
CComVariant IXMLDOMElement http://blog.sina.com.cn/s/blog_69e905cd0100kp5i.html