1697 ⑨要写信

时间限制: 1 s

空间限制: 128000 KB

题目等级 : 黄金 Gold

传送门

题目描述 Description

琪露诺(冰之妖精)有操控冷气的能力。能瞬间冻结小东西,比普通的妖精更危险。一直在释放冷气的她周围总是非常寒冷。

由于以下三点原因……

琪露诺的符卡 冰符“Icicle Fall”-Easy的弹幕有够蠢的,只要站在她的正前方就没任何弹幕会碰到你;

ZUN在《红魔乡》中介绍她时已经说她有点笨笨的了;

在ZUN放出《东方花映冢》的介绍图时,在图中把琪露诺放在了⑨的位置上,并以“⑨笨蛋”简单带过,从此“⑨”及“笨蛋”就成为她的别名了……

所以琪露诺便得到了“笨蛋”的别称。

某日,琪露诺又2了……

她写了N封信要装到N个信封里面,却全都装错了……现在想知道有多少种装错的可能性。

输入描述 Input Description

信和信封的数量N。

输出描述 Output Description

装错的可能性的数量。

样例输入 Sample Input

输入样例1

2

输入样例2

4

样例输出 Sample Output

输出样例1

1

输出样例2

9

数据范围及提示 Data Size & Hint

1≤N≤100

分类标签 Tags

动态规划 序列型DP 高精度 数学相关

/*
高精度+错排公式.
错排公式可以自己搞出来.
递推:
有n封信,第i封信装错的话有i-1种可能,
设i-1其中一个为k,那么k有两种装法:
(1):装到第i个信封里,此时剩下的i-2封信要装到i-2个信封里,就有f[i-2];
(2):装到除i之外的信封里,这时i-1的作用和i一样,剩下的就有f[i-1];
so f[i]=(i-1)*(f[i-1]+f[i-2]) .
*/
#include<iostream>
#include<cstdio>
#define MAXN 101
using namespace std;
int f[MAXN][1000001],n;
int len(int x)
{
int i=100000-1;
while(!f[x][i]&&i) i--;
return i;
}
void add(int i,int l)
{
for(int j=0;j<=l;j++)
{
if(f[i][j]>9)
{
f[i][j+1]+=f[i][j]/10;
f[i][j]%=10;
}
}
}
void slove()
{
int l,l1;
for(int i=3;i<=n;i++)
{
l=len(i-1);
for(int j=0;j<=l;j++)
{
f[i][j]=f[i-1][j]+f[i-2][j];
}
add(i,l);
l1=len(i);
for(int j=0;j<=l1;j++)
{
f[i][j]*=i-1;
}
add(i,l1);
}
l=len(n);
for(int i=l;i>=0;i--)
{
printf("%d",f[n][i]);
}
}
int main()
{
scanf("%d",&n);
f[2][0]=1;
slove();
return 0;
}

Codevs 1697 ⑨要写信的更多相关文章

  1. ⑨要写信(codevs 1697)

    题目描述 Description 琪露诺(冰之妖精)有操控冷气的能力.能瞬间冻结小东西,比普通的妖精更危险.一直在释放冷气的她周围总是非常寒冷. 由于以下三点原因…… 琪露诺的符卡 冰符“Icicle ...

  2. codevs 3289 花匠

    题目:codevs 3289 花匠 链接:http://codevs.cn/problem/3289/ 这道题有点像最长上升序列,但这里不是上升,是最长"波浪"子序列.用动态规划可 ...

  3. codevs 1082 线段树练习 3(区间维护)

    codevs 1082 线段树练习 3  时间限制: 3 s  空间限制: 128000 KB  题目等级 : 大师 Master 题目描述 Description 给你N个数,有两种操作: 1:给区 ...

  4. codevs 1285 二叉查找树STL基本用法

    C++STL库的set就是一个二叉查找树,并且支持结构体. 在写结构体式的二叉查找树时,需要在结构体里面定义操作符 < ,因为需要比较. set经常会用到迭代器,这里说明一下迭代器:可以类似的把 ...

  5. codevs 1576 最长上升子序列的线段树优化

    题目:codevs 1576 最长严格上升子序列 链接:http://codevs.cn/problem/1576/ 优化的地方是 1到i-1 中最大的 f[j]值,并且A[j]<A[i] .根 ...

  6. codevs 1080 线段树点修改

    先来介绍一下线段树. 线段树是一个把线段,或者说一个区间储存在二叉树中.如图所示的就是一棵线段树,它维护一个区间的和. 蓝色数字的是线段树的节点在数组中的位置,它表示的区间已经在图上标出,它的值就是这 ...

  7. codevs 1228 苹果树 树链剖分讲解

    题目:codevs 1228 苹果树 链接:http://codevs.cn/problem/1228/ 看了这么多树链剖分的解释,几个小时后总算把树链剖分弄懂了. 树链剖分的功能:快速修改,查询树上 ...

  8. codevs 1082 线段树区间求和

    codevs 1082 线段树练习3 链接:http://codevs.cn/problem/1082/ sumv是维护求和的线段树,addv是标记这歌节点所在区间还需要加上的值. 我的线段树写法在运 ...

  9. codevs 1052 地鼠游戏

    1052 地鼠游戏 http://codevs.cn/problem/1052/ 题目描述 Description 王钢是一名学习成绩优异的学生,在平时的学习中,他总能利用一切时间认真高效地学习,他不 ...

随机推荐

  1. Hadoop系列(一)hadoop2.2.0源码编译

    操作系统:Centos 所需条件:能上网 编译所需工具: apache-ant-1.9.2-bin.tar.gz apache-maven-3.0.5-bin.tar.gz findbugs-2.0. ...

  2. Word恢复文本转换器-修复损坏的WORD文件

    第一步:找任意一个未损坏的文件打开word,新建的或者是已有的好的word文档,在文档的工具-选项-常规中,选中“打开时确认转换”复选框,并按确定. 第二步:点击word软件左上角的 文件-打开,找到 ...

  3. __FILE__,__LINE__,FUNCTION__

    __FILE__,__LINE__,FUNCTION__实现代码跟踪调试 ( linux 下c语言编程 ) 先看下简单的初始代码:注意其编译运行后的结果. root@xuanfei-desktop:~ ...

  4. javascript函数库

    //构造缓存函数 var memoizer = function (memo, fundamental) { var shell = function (n) { var result = memo[ ...

  5. 多组radio传值注意事项

    多组radio传值,每组的radio name必须不同,否则所有的radio将被视为一组,传值时只会传其中一组的值到后台,如果这时你用数组接收从前台传过来的值并使用,就会报数组越界异常

  6. Docker - 配置国内加速器加速镜像下载。

    引言 由于网络原因,我们在pull Image 的时候,从Docker Hub上下载会很慢...所以,国内的Docker爱好者们就添加了一一些国内的镜像(mirror),方便大家使用. 配置阿里云加速 ...

  7. 适合高级Java程序员看的12本书

    1.Thinking in Java 2.Head First Java 3.Java in a Nutshell 4.The elements of Java style 5.Effective J ...

  8. 为Centos安装自定义yum源

    大家都知道,大部分java生产欢迎用的是linux系统.linux系统分为redhat系列和debian系列,各有各的优点.老沙比较喜欢redhat系列,所以一直使用centos.centos可以使用 ...

  9. map的例子

    11.4 编写单词计数程序,忽略大小写和标点.例如,“example.”,“example,"和”Example“应该递增相同的计算器. #include<iostream> # ...

  10. 多态VI的创建

    比较适合使用多态VI的场合:一个算法会应用到几种不同的数据类型上.比如读写 INI 文件的 VI,它 们既可以读写数值型的数据,也可以读写字符串.布尔等数据类型. 实现多态 VI 之前,一般先实现它的 ...