博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
poj2748
阅读量:6256 次
发布时间:2019-06-22

本文共 734 字,大约阅读时间需要 2 分钟。

f[n] += 1 + f[i] * (n - i);

这个公式可以利用sum(前n项和)进行O(1)的递推。也可以自己根据结果总结规律f[i] = 3 * f[i -1] - f[i - 2];

但是快速幂会超时。所以想到有循环节,写个程序找循环节,发现为75000,所以只需要求出前75000个即可。

ContractedBlock.gif
ExpandedBlockStart.gif
View Code
#include 
#include
#include
#include
using namespace std; #define maxn 100005 #define w 100000 int f[maxn]; int n; int main() {
//freopen("t.txt", "r", stdin); f[0] = 1; f[1] = 1; for (int i = 2; i < 75000; i++) f[i] = (3 * f[i - 1] - f[i - 2] + w) % w; int t; scanf("%d", &t); while (t--) {
scanf("%d", &n); printf("%d\n", f[n % 75000]); } return 0; }

转载于:https://www.cnblogs.com/rainydays/archive/2011/10/06/2199769.html

你可能感兴趣的文章
UVA10391 ZOJ1825 Compound Words【SET+暴力】
查看>>
动态规划------Combination Sum IV
查看>>
[BZOJ2463][中山市选2009]谁能赢呢?
查看>>
iOS数据持久化存储之属性列表
查看>>
最后冲刺时间
查看>>
前端开发薪资之各地区对比(图文分析)
查看>>
jquery简单的大背景banner图片全屏切换
查看>>
java疑问
查看>>
JAVAEE 介绍
查看>>
视图和路由
查看>>
优酷新版播放器站外调用代码详解
查看>>
Python之操作符优先级
查看>>
【学习笔记】PHP会话控制
查看>>
面试题 17:合并两个排序的链表
查看>>
Linux命令--链接文件的那些事
查看>>
您对无法重新创建的表进行了更改或者启用了“阻止保存要求重新创建表的更改”选项...
查看>>
《梦断代码》读后感02
查看>>
java面试资料总结
查看>>
ubuntu 16.04 安装PhpMyAdmin
查看>>
c#中的常用ToString()方法总结
查看>>