2016 百度之星 大搬家
2016-05-13 08:39
204 查看
dp,根据题意可以推算出,n个数中只有两种情况,要么是自己跟自己交换,要么是两个之间相互交换,即 a-a 或者 b-c c-b,
假设n个数有s
中组合,所以对第n个数进行讨论,他可以在前面的各种情况中直接插入n-n,所以有s[n-1]种组合,他也任意从n-1个数中选择一个进行两两交换,即(n-1)*s[n-2](n-2代表n-1个数中一共有n-2中 a-a形式的组合)
#include <cstdio>
#include <iostream>
using namespace std;
long long int s[1000006];
int main()
{
int T,n;
cin >> T;
s[0] = s[1] = 1;
for(int i=2; i<1000001; i++)
s[i] = (s[i-1] + (i-1)*s[i-2])%1000000007;
int count = 0;
while(T--)
{
count++;
scanf("%d",&n);
printf("Case #%d:\n",count);
printf("%I64d\n",s
%1000000007);
}
return 0;
}
假设n个数有s
中组合,所以对第n个数进行讨论,他可以在前面的各种情况中直接插入n-n,所以有s[n-1]种组合,他也任意从n-1个数中选择一个进行两两交换,即(n-1)*s[n-2](n-2代表n-1个数中一共有n-2中 a-a形式的组合)
#include <cstdio>
#include <iostream>
using namespace std;
long long int s[1000006];
int main()
{
int T,n;
cin >> T;
s[0] = s[1] = 1;
for(int i=2; i<1000001; i++)
s[i] = (s[i-1] + (i-1)*s[i-2])%1000000007;
int count = 0;
while(T--)
{
count++;
scanf("%d",&n);
printf("Case #%d:\n",count);
printf("%I64d\n",s
%1000000007);
}
return 0;
}
相关文章推荐
- BZOJ4561: [JLoi2016]圆的异或并
- 【BZOJ4429】[Nwerc2015] Elementary Math小学数学【二分图匹配】
- iOS runtime的理解
- java web 文件下载
- 实现自己的字符串拷贝函数Strcpy
- PHP获取URL
- 经典算法<二>约瑟夫问题 C++实现
- 二叉树遍历,先序中序二叉树构造,BFS,完全二叉树构造
- 解决Fedora解压文件产生乱码的问题
- android 之讯飞语音接入的输出(2)
- 获取SQLSERVER的IP地址
- APP界面设计之页面布局的22条基本原则
- 从《奋斗》到《欢乐颂》:十年之间,时代精神已变
- 经典算法<一>迷宫问题 2.单条路径 BFS求解 C++实现
- 经典算法<一>迷宫问题 1.单条路径 DFS求解 C++实现
- Mybatis报错
- 单调递增最长子序列
- java虚拟机底层结构详解
- 在线编程--层次打印二叉树
- Java关键字