BZOJ 2822: [AHOI2012]树屋阶梯
2016-03-19 16:20
337 查看
BZOJ 2822: [AHOI2012]树屋阶梯
标签(空格分隔): OI-BZOJ OI-数学 OI-高精度Time Limit: 1 Sec
Memory Limit: 128 MB
Description
暑假期间,小龙报名了一个模拟野外生存作战训练班来锻炼体魄,训练的第一个晚上,教官就给他们出了个难题。由于地上露营湿气重,必须选择在高处的树屋露营。小龙分配的树屋建立在一颗高度为N+1尺(N为正整数)的大树上,正当他发愁怎么爬上去的时候,发现旁边堆满了一些空心四方钢材(如图1.1),经过观察和测量,这些钢材截面的宽和高大小不一,但都是1尺的整数倍,教官命令队员们每人选取N个空心钢材来搭建一个总高度为N尺的阶梯来进入树屋,该阶梯每一步台阶的高度为1尺,宽度也为1尺。如果这些钢材有各种尺寸,且每种尺寸数量充足,那么小龙可以有多少种搭建方法?(注:为了避免夜里踏空,钢材空心的一面绝对不可以向上。)
以树屋高度为4尺、阶梯高度N=3尺为例,小龙一共有如图1.2所示的5种
搭 建方法:
Input
一个正整数 N(1≤N≤500),表示阶梯的高度
Output
一个正整数,表示搭建方法的个数。(注:搭建方法个数可能很大。)
Sample Input
3
Sample Output
5
HINT
1 ≤N≤500
Solution
设f[i]表示阶梯高度为i的答案枚举包含左下角矩形的右上角可以得到转移方程,发现为卡特兰数
高精计算
Code
#include<iostream> #include<stdio.h> #include<stdlib.h> #include<string.h> #include<math.h> #include<algorithm> #include<queue> #include<set> #include<map> #include<bitset> #include<vector> using namespace std; #define PA pair<int,int> int read() { int s=0,f=1;char ch=getchar(); while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();} while(ch>='0'&&ch<='9'){s=(s<<1)+(s<<3)+ch-'0';ch=getchar();} return s*f; } //smile please int n; int pp[1005],p; int q[1005][505],s[1005]; int a[300]={1},ma=0; int main() { //freopen(".in","r",stdin); //freopen(".out","w",stdout); for(int i=2;i<=1000;i++) {if(pp[i])continue; for(int j=i*2;j<=1000;j+=i) {pp[j]=1;} for(int j=i;j<=1000;j+=i) { int k=j; while(k%i==0) k/=i,q[j][++q[j][0]]=i; } } n=read(); for(int i=n+2;i<=n*2;i++) for(int j=q[i][0],*k=(&q[i][0])+1;j;j--,k++) s[*k]++; for(int i=1;i<=n;i++) for(int j=q[i][0],*k=(&q[i][0])+1;j;j--,k++) s[*k]--; for(int i=1;i<=n*2;i++) for(int j=s[i];j;j--) {for(int k=0;k<=ma+1;k++) {a[k]*=i; if(k)a[k]+=a[k-1]/1000000,a[k-1]%=1000000; } if(a[ma+1])ma++; } printf("%d",a[ma]); for(int i=ma-1;i>=0;i--) printf("%06d",a[i]); //fclose(stdin); //fclose(stdout); return 0; }
相关文章推荐
- Android 中SharedPreference存储
- 第六届蓝桥杯题目练习-3
- 随机生成四则运算表达式02
- Android 导航
- Android 碎片 Fragment
- C/C++ 错题总结
- opencv 学习之 亮度检测
- 721学习法则
- 组合数取模模板
- 基于最小优先级队列构造哈夫曼树 Java
- 2016大连理工大学计算机考研复试
- Android之Notification的多种用法
- RAID浅谈
- 魔改Cmake系列:cmake中Boost找不到库的解决方法
- 【Uva11019】Matrix Matcher【AC自动机】【二维字符串匹配】
- Nginx 记录请求分发日志设置
- IP之于游戏
- file类常用API
- easy_install 和 pip使用差别
- 四则运算3(结对开发)