总结一下做递推题的经验,一般都开成long long (别看项数少,随便就超了) 一般从第 i 项开始推其与前面项的关系(动态规划也是这样),而不是从第i

项推其与后面的项的关系。

hdu2044:http://acm.hdu.edu.cn/showproblem.php?pid=2044

//没开成long long WA了一次
#include<iostream>
#include<cstdio>
#include<algorithm>
#include <string.h>
#include <math.h>
using namespace std; long long f[][];///表示a - b的方案数
int main()
{
for(int i=;i<;i++){
f[i][i]=;
f[i][i+]=;
f[i][i+]=;
}
for(int i=;i<;i++){
for(int j=i+;j<;j++){
f[i][j]=f[i][j-]+f[i][j-];
}
}
int tcase;
scanf("%d",&tcase);
while(tcase--){
int a,b;
scanf("%d%d",&a,&b);
printf("%lld\n",f[a][b]);
}
return ;
}

hdu2045:http://acm.hdu.edu.cn/showproblem.php?pid=2045

#include<iostream>
#include<cstdio>
#include<algorithm>
#include <string.h>
#include <math.h>
using namespace std;
///第 n 种方案由前 n-1种方案决定
///如果 第 n-1 个格子和 第 1个格子涂色方案不同,那么第n个格子可选方案只有一种, f[n] = f[n-1];
///若第n-1个格子和第1个格子相同,此时为f(n-2)再乘第n-1个格子的颜色数,这样为2*f(n-2);
long long f[];
int main()
{
f[]=;
f[]=;
f[]=;
for(int i=;i<=;i++) f[i]=f[i-]+*f[i-];
int n;
while(scanf("%d",&n)!=EOF)
{
printf("%lld\n",f[n]);
} return ;
}

hdu 2046:http://acm.hdu.edu.cn/showproblem.php?pid=2046

#include<iostream>
#include<cstdio>
#include<algorithm>
#include <string.h>
#include <math.h>
using namespace std;
///前 i 个格子如果在第i列放竖着放一根1*2的格子,那么 f[i] = f[i-1]
///如果在第 i-1列和第 i列横着放两根1*2的格子,那么f[i] = f[i-2]
///f[i] = f[i-1]+f[i-2]
long long f[];
int main()
{
f[]=;
f[]=;
for(int i=;i<=;i++) f[i]=f[i-]+f[i-];
int n;
while(scanf("%d",&n)!=EOF){ printf("%lld\n",f[n]);
} return ;
}

hdu 2047:http://acm.hdu.edu.cn/showproblem.php?pid=2047

#include<iostream>
#include<cstdio>
#include<algorithm>
#include <string.h>
#include <math.h>
using namespace std;
///如果第 n个字符为 'E'或者'F',那么前n-1个没有任何限定 f[n] = 2*f[n-1]
///如果为'O' ,那么第 n-1个格子只能选'E'或'F',前n-2没有限定,f[n] = 2*f[n-2]
///f[n]=2*f[n-1]+2*f[n-2]
long long f[];
int main()
{
f[] = ;
f[] = ;
for(int i=;i<;i++) f[i]=*f[i-]+*f[i-];
int n;
while(scanf("%d",&n)!=EOF)
{
printf("%I64d\n",f[n]);
} return ;
}

hdu 2048:http://acm.hdu.edu.cn/showproblem.php?pid=2048

这题开始不会做。。然后知道了错排公式:错排公式

果然弄数学功底很重要啊。。然后就很容易了。

#include<iostream>
#include<cstdio>
#include<algorithm>
#include <string.h>
#include <math.h>
using namespace std; ///错排:考虑一个有n个元素的排列,若一个排列中所有的元素都不在自己原来的位置上,
///那么这样的排列就称为原排列的一个错排。
///当n个编号元素放在n个编号位置,元素编号与位置编号各不对应的方法数用D(n)表示,那么
/// D(n-1)就表示n-1个编号元素放在n-1个编号位置,各不对应的方法数,其它类推.
///第一步,把第n个元素放在一个位置,比如位置k,一共有n-1种方法;
///第二步,放编号为k的元素,这时有两种情况:⑴把它放到位置n,那么,对于剩下的n-1个元素,由于
///第k个元素放到了位置n,剩下n-2个元素就有D(n-2)种方法;⑵第k个元素不把它放到位置n,这时,对于
///这n-1个元素,有D(n-1)种方法;
///所以得到错排公式:f[i] = (i-1)*(f[i-1]+f[i-2]) ///解题思路:错排除以全排列 (有意思的是,到8以后这个几率就恒定了)
long long f[];
int main()
{
f[] = ;
f[] = ;
f[] = ;
for(int i=;i<=;i++) f[i]=(i-)*f[i-]+(i-)*f[i-];
int tcase;
scanf("%d",&tcase);
while(tcase--)
{
int n;
scanf("%d",&n);
long long k =;
for(int i=;i<=n;i++) k*=i;
printf("%.2lf%%\n",f[n]*1.0/k*);
} return ;
}

hdu 2049:http://acm.hdu.edu.cn/showproblem.php?pid=2049

知道错排公式就会了。

#include<iostream>
#include<cstdio>
#include<algorithm>
#include <string.h>
#include <math.h>
using namespace std;
///M个数有f[M]种错排,N里面选M个数有C(M,N)=n!/(m!*(n-m)!) = n!/m!/(n-m)!种可能,
///所以 f[M]*C(M,N)即为所求
long long f[];
int main()
{
f[] = ;
f[] = ;
f[] = ;
for(int i=;i<=;i++) f[i]=(i-)*f[i-]+(i-)*f[i-];
int tcase;
scanf("%d",&tcase);
while(tcase--)
{
int n,m;
scanf("%d%d",&n,&m);
long long k =;
int t = n-m;
for(int i=n;i>m;i--){
k*=i;
while(k%t==&&t!=){
k=k/t;
t--;
}
}
printf("%lld\n",f[m]*k);
} return ;
}

hdu 2050:http://acm.hdu.edu.cn/showproblem.php?pid=2050

我按照自己的想法做,然后AC了。。但没法证明。。。具体证明看这里:http://www.cnblogs.com/chaosheng/archive/2012/01/26/2329583.html

#include<iostream>
#include<cstdio>
#include<algorithm>
#include <string.h>
#include <math.h>
using namespace std; ///这个题没两条折线之间要分割的平面尽可能的多,那么每两条之间都会有四个交点
///所以当n条折线时,会多出4*n*(n-1)/2个点。。然后我加上原来的n个顶点,就得到所有顶点的个数
///然后+1就是答案。。
int main()
{
int tcase;
scanf("%d",&tcase);
while(tcase--)
{
int n;
scanf("%d",&n );
printf("%d\n",*n*n-n+);
} return ;
}

hdu 2044-2050 递推专题的更多相关文章

  1. 致初学者(四):HDU 2044~2050 递推专项习题解

    所谓递推,是指从已知的初始条件出发,依据某种递推关系,逐次推出所要求的各中间结果及最后结果.其中初始条件或是问题本身已经给定,或是通过对问题的分析与化简后确定.关于递推的知识可以参阅本博客中随笔“递推 ...

  2. HDOJ(HDU).2044-2049 递推专题

    HDOJ(HDU).2044-2049 递推专题 点我挑战题目 HDU.2044 题意分析 先考虑递推关系:从1到第n个格子的时候由多少种走法? 如图,当n为下方格子的时候,由于只能向右走,所以有2中 ...

  3. <每日一题> Day6:HDU递推专题完结

    原题链接 这是我自己Clone的专题,A,B题解昨天发过了 C:参考代码: /* 很容易我们可以手推出n = 1, 2, 3时的情况,我们假设前n - 1 列已经放好,方法有dp[n - 1]种,第n ...

  4. HDU 4747 Mex 递推/线段树

    题目链接: acm.hdu.edu.cn/showproblem.php?pid=4747 Mex Time Limit: 15000/5000 MS (Java/Others)Memory Limi ...

  5. HDU 2604 Queuing(递推+矩阵)

    Queuing [题目链接]Queuing [题目类型]递推+矩阵 &题解: 这题想是早就想出来了,就坑在初始化那块,只把要用的初始化了没有把其他的赋值为0,调了3,4个小时 = = 本题是可 ...

  6. HDU - 2604 Queuing(递推式+矩阵快速幂)

    Queuing Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Su ...

  7. hdu 1723 DP/递推

    题意:有一队人(人数 ≥ 1),开头一个人要将消息传到末尾一个人那里,规定每次最多可以向后传n个人,问共有多少种传达方式. 这道题我刚拿到手没有想过 DP ,我觉得这样传消息其实很像 Fibonacc ...

  8. hdu 1249 三角形 (递推)

    三角形 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submiss ...

  9. [hdu 2604] Queuing 递推 矩阵快速幂

    Problem Description Queues and Priority Queues are data structures which are known to most computer ...

随机推荐

  1. ContestHunter暑假欢乐赛 SRM 03

    你们也没人提醒我有atcoderQAQ... A题曼哈顿距离=欧拉距离就是在同一行或者同一列,记录下i,j出现过的次数,减去就行,直接map过. B题一开始拿衣服了,一直以为排序和不排序答案是一个样的 ...

  2. shell中的颜色显示

    By francis_hao    Sep 30,2017   图片来自参考[1]     其中,"033"是八进制数,其对应的asciima也就是ESC.后面的颜色格式为:[背景 ...

  3. Spring面试,IoC和AOP的理解(转)

    spring 的优点?1.降低了组件之间的耦合性 ,实现了软件各层之间的解耦 2.可以使用容易提供的众多服务,如事务管理,消息服务等 3.容器提供单例模式支持 4.容器提供了AOP技术,利用它很容易实 ...

  4. HDU 1596 floyd

    find the safest road Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Ot ...

  5. jq 数组定义,拼接~~~push应用

    var radio_checked_array = []; $("input[type='radio']").each(function(){ if($(this).attr('c ...

  6. process monitor教程汇总

          这是只一个简单的例子,当然还有更复杂的规则说明,可以参考一下列表里的规则. 最后说下 process monitor 到底有什么用? 除了那些电脑高手喜欢分析程序运行情况外, 还有那些编程 ...

  7. php中相关函数

    1.php标准风格 <?php //这是标准风格 echo '推荐标准风格'; ?> 2.php中文乱码 .html:<meta http-equiv="Content-T ...

  8. js的作用域深入理解

    一.什么是作用域 作用域是指对某一变量和方法具有访问权限的代码空间,Javascript的作用域只有两种:全局作用域和本地作用域,本地作用域是按照函数来区分的(即全局变量和局部变量)) 局部变量:只有 ...

  9. python 面试题(1)

    好用简洁的大数据技术:python.hadoop.R 慢慢学习,随时分享 1.什么是Python?使用Python有什么好处? Python是一种编程语言,它有对象.模块.线程.异常处理和自动内存管理 ...

  10. HDU 5901 Count primes 大素数计数

    题意:计算1~N间素数的个数(N<=1e11) 题解:题目要求很简单,作为论文题,模板有两种 \(O(n^\frac{3}{4} )\),另一种lehmer\(O(n^\frac{2}{3})\ ...