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. Esper系列(三)Context和Group by

    Context 把不同的事件按照框的规则框起来(规则框在partition by中定义),并且有可能有多个框,而框与框之间不会互相影响. 功能: 组合事件查询并进行分组,类型:Hash Context ...

  2. Excel中VBA 连接 数据库 方法- 摘自网络

    Sub GetData() Dim strConn As String, strSQL As String Dim conn As ADODB.Connection Dim ds As ADODB.R ...

  3. 最简单实现跨域的方法:用 Nginx 反向代理

    本文作者: 伯乐在线 - 良少 .未经作者许可,禁止转载!欢迎加入伯乐在线 专栏作者. 什么是跨域 跨域,指的是浏览器不能执行其他网站的脚本.它是由浏览器的同源策略造成的,是浏览器对javascrip ...

  4. Tuple元组

    Tuple元组 Tuple 是 Storm 的主要数据结构,并且是 Storm 中使用的最基本单元.数据模型和元组. Tuple 描述 Tuple 就是一个值列表, Tuple 中的值可以是任何类型的 ...

  5. 部署ActiveMQ的Share File System Master-Slave

    之前在项目里用MQ是用单节点,因为业务量不大没有主从.这样风险很大,会有单点问题.新项目起来了,需要一个高可用的MQ,故研究了下AMQ的几种master-slave方式: 1.Pure Master- ...

  6. nyoj 282 You are my brother

    You are my brother 时间限制:1000 ms  |  内存限制:65535 KB 难度:3   描述 Little A gets to know a new friend, Litt ...

  7. linux中删除目录

    在linux中删除一个目录很简单,很多人还是习惯用rmdir,不过一旦目录非空,就陷入深深的苦恼之中,现在使用rm -rf命令即可解决. 直接rm就可以了,不过要加两个参数-rf 即:rm -rf 目 ...

  8. 如何将Android默认的Camra程序导入到eclipse中

    由于工作需要将camera源码导入到Eclipse中,找了很多的方法,现将自己的整理发出来.... 由于开发的要求,需要将Android默认的Camra程序导入到eclipse中,进行修改和再开发. ...

  9. 如何调试msbuild?

    博客搬到了fresky.github.io - Dawei XU,请各位看官挪步.最新的一篇是:如何调试msbuild?.

  10. 关于EF中ApplyCurrentValues和ApplyOriginalValues区别

    关于EF中ApplyCurrentValues和ApplyOriginalValues区别:两者都是编辑数据时使用. //        // 摘要:        //     将 System.D ...