复杂度

描述

for(i=1;i<=n;i++)

for(j=i+1;j<=n;j++)

for(k=j+1;k<=n;k++)

operation;

你知道 operation 共执行了多少次吗;

输入
输入 m 和n 表示m为for循环的层数,n为for中的n。
(n,m<=2000),输入以n==0和m==0结束
输出
输出operation执行的次数(输入结果mod 1009)
样例输入
2 3
1 3
2 4
0 0
样例输出
3
3
6

  仔细观察就会发现,这里面的 i, j, k,... 等等,他们的开头处的取值完全不一样,这就好比有n个数值,开头取一个,有n中取法;再取第二个,有n-1中取法;再取第三个,有n-2种取法;。。。一直到再取第m个有n-m+1中取法。这么一说,想到了什么?组合数!有木有!!!就是这么神奇,其实整个题目就是要计算组合数的一个题。

接着就是组合数公式的编程,而常识告诉我们,一旦计算C(2000,1000)这种情况,用阶层计算是十分恐怖的,辛好结果是要求对1009取余的结果,那么问题来了,如何不用阶层来快速计算组合数。

首先我们回顾下组合数的公式:

  

以及组合数的一些性质:

C(n,m)=  C(n-1,m-1)+C(n-1,m)  关于这个公式的证明,可以套用上面的公式来直接证明,还有直接逻辑思考套用到某个实际事例中就能证明,这里就不总结了。

C(n,m)= C(n,m-1) + C(n-1,m-1)

 #include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
const int N = ;
int f[][] = {};
void fun()
{
for(int i = ; i <= ; i++)
for(int j = i; j <= ; j++)
{
if(i == j)
{
f[i][j] = ;
continue;
}
if(i == )
{
f[i][j] = j%N;
continue;
}
f[i][j] = ((f[i][j-]) + (f[i-][j-]))%N;
}
}
int main()
{
fun();
int n,m;
while(scanf("%d%d",&m,&n),n+m)
{
printf("%d\n",f[m][n]);
}
return ;
}

其实这是一个很普遍的问题,就是组合数取模问题,这下就一次性解决了吧。

http://blog.csdn.net/acdreamers/article/details/8037918

http://www.3773.com.cn/NCRE/434536.shtml

NYOJ 743的更多相关文章

  1. NYOJ 1007

    在博客NYOJ 998 中已经写过计算欧拉函数的三种方法,这里不再赘述. 本题也是对欧拉函数的应用的考查,不过考查了另外一个数论基本定理:如何用欧拉函数求小于n且与n互质所有的正整数的和. 记eule ...

  2. NYOJ 998

    这道题是欧拉函数的使用,这里简要介绍下欧拉函数. 欧拉函数定义为:对于正整数n,欧拉函数是指不超过n且与n互质的正整数的个数. 欧拉函数的性质:1.设n = p1a1p2a2p3a3p4a4...pk ...

  3. NYOJ 333

    http://www.cppblog.com/RyanWang/archive/2009/07/19/90512.aspx?opt=admin 欧拉函数 E(x)表示比x小的且与x互质的正整数的个数. ...

  4. NYOJ 99单词拼接(有向图的欧拉(回)路)

    /* NYOJ 99单词拼接: 思路:欧拉回路或者欧拉路的搜索! 注意:是有向图的!不要当成无向图,否则在在搜索之前的判断中因为判断有无导致不必要的搜索,以致TLE! 有向图的欧拉路:abs(In[i ...

  5. nyoj 10 skiing 搜索+动归

    整整两天了,都打不开网页,是不是我提交的次数太多了? nyoj 10: #include<stdio.h> #include<string.h> ][],b[][]; int ...

  6. 简答哈希实现 (nyoj 138 找球号2)

    例题链接:http://acm.nyist.net/JudgeOnline/problem.php?pid=138 代码目的:复习哈希用 代码实现: #include "stdio.h&qu ...

  7. nyoj 284 坦克大战 简单搜索

    题目链接:http://acm.nyist.net/JudgeOnline/problem.php?pid=284 题意:在一个给定图中,铁墙,河流不可走,砖墙走的话,多花费时间1,问从起点到终点至少 ...

  8. nyoj 170 网络的可靠性

    题目链接:http://acm.nyist.net/JudgeOnline/problem.php?pid=170 思路:统计每个节点的度,将度为1的节点消去所需要的最少的边即为答案. 代码: #in ...

  9. nyoj 139 我排第几个--康拓展开

    我排第几个 时间限制:1000 ms  |  内存限制:65535 KB 难度:3   描述 现在有"abcdefghijkl”12个字符,将其所有的排列中按字典序排列,给出任意一种排列,说 ...

随机推荐

  1. Xamarin 免费了,你能做什么?

    3月底,微软正式宣布:Xamarin免费了!那么,你能做什么? 抢先一步,用Xuni助力你的Xamarin开发! Xamarin是什么 Xamarin含Xamarin.Andoid,Xamarin.i ...

  2. tomcat启动时候报错Can't convert argument: null

    一.启动报错: 为了避免导入的项目重名,我先修改了前一个项目的名称. 重新启动该项目至tomcat,报错:java.lang.IllegalArgumentException: Cant conver ...

  3. easyui datagrid 动态操作editor 的方法

    easyui本身是不提供这么细节的功能的,需要我们自己拓展下: 在easyui.min.js中扩展: $.extend($.fn.datagrid.methods, { addEditor : fun ...

  4. 【转】Windows 窗口层次关系

    原文链接:undefined! 相信在Windows 下面编程的很多兄弟们都不是很清楚Windows 中窗口的层次关系是怎么样的,这个东西很久已经研究过一下,后来又忘记了,今天又一次遇到了这个问题,所 ...

  5. 为什么你不应该使用 MongoDB

    本文转载自: http://www.oschina.net/translate/why-you-should-never-use-mongodb (只作转载, 不代表本站和博主同意文中观点或证实文中信 ...

  6. SQL切换真假状态标识字段

    需求:用一条SQL(SQL SERVER)语句,实现反向更改状态标识字段(类型为bit)的值.即是从true变false,或从false到true. 方案: 一.判断原来这个字段值,然后UPDATE为 ...

  7. UIPickerView的使用(三)

    前两篇文章 UIPickerView的使用(一) . UIPickerView的使用(二),学习了UIPickerView的单列选择器和双列选择器的使用. 现在我们一起学习相互依赖的多列选择器 1.遵 ...

  8. 网络分析之Pgrouting(转载)

    网上关于Pgrouting的使用介绍太简单了,这里想详细的总结一下Pgrouting的使用,其实主要参照官方文档:http://workshop.pgrouting.org/ 第一步:配置环境 关于P ...

  9. Android Fragment使用(二) 嵌套Fragments (Nested Fragments) 的使用及常见错误

    嵌套Fragment的使用及常见错误 嵌套Fragments (Nested Fragments), 是在Fragment内部又添加Fragment. 使用时, 主要要依靠宿主Fragment的 ge ...

  10. python之选课系统详解[功能未完善]

    作业需求 思路:1.先写出大体的类,比如学校类,学生类,课程类--   2.写出类里面大概的方法,比如学校类里面有创建讲师.创建班级-- 3.根据下面写出大致的代码,并实现其功能       遇到的困 ...