【noi 2.6_9277】Logs Stacking堆木头(DP)
题意:给出在最底层的木头的个数,问有多少种堆放木头的方式。要求木头必须互相挨着在一起。
解法:f[i]表示最底层i个木头的堆放木头的方式。注意递推的思想!
只需知道上一层堆放0~i-1个(即最底层堆放i个木头)的方式数就可以利用加法原理得到f[i]。
方法一、用前缀和求解。
由于要求木头挨在一起,上层为1个时,相应有i-1个位置可放;2个时,相应为i-2。即:f[i]=f[0]+f[1]*(i-1)+f[2]*(i-2)...+f[i-1] f[i-1]=f[0]+f[1]*(i-2)+f[2]+(i-3)... +f[i-2] ==》 f[i]=f[i-1]+f[1]+f[2]+...+f[i-1]=f[i-1]+sum[i-1](sum[i]表示从f[1]到f[i]的和)
1 #include<cstdio>
2 #include<cstdlib>
3 #include<cstring>
4 #include<iostream>
5 using namespace std;
6 #define N 200000
7 #define mod 100000
8 int sum[N],f[N];
9
10 int main()
11 {
12 int T,n;
13 scanf("%d",&T);
14 f[0]=1,sum[0]=0;//sum[i]:f[1~i]
15 for (int i=1;i<=N;i++)
16 {
17 f[i]=(f[i-1]+sum[i-1])%mod;
18 sum[i]=(sum[i-1]+f[i])%mod;
19 }
20 while (T--)
21 {
22 scanf("%d",&n);
23 printf("%d\n",f[n]);
24 }
25 return 0;
26 }
1
方法二、用斐波拉契数列。
由上面的式子可推出——f[i]=f[i-1]+(f[i-1]-f[i-2])+f[i-1]=3f[i-1]-f[i-2] 这就是斐波拉契数列的奇数项通式,而推导我不知道,但还是能发现i=1~...时,f[]=1,2,5,12,34.. 而斐波拉契数列为1,1,2,3,5,8,13,21,34...奇数项重合的。
【noi 2.6_9277】Logs Stacking堆木头(DP)的更多相关文章
- 【OpenJudge9277】【递推】Logs Stacking堆木头
Logs Stacking堆木头 总时间限制: 1000ms 内存限制: 131072kB [描述] Daxinganling produces a lot of timber. Before loa ...
- 【Openjudge 9277 Logs Stacking堆木头】 题解
题目链接:http://noi.openjudge.cn/ch0206/9277/ ... #include <algorithm> #include <iostream> # ...
- 基于HTML5堆木头游戏
今天要来分享一款很经典的HTML5游戏——堆木头游戏,这款游戏的玩法是将木头堆积起来,多出的部分将被切除,直到下一根木头无法堆放为止.这款HTML5游戏的难点在于待堆放的木头是移动的,因此需要你很好的 ...
- UVa 103 - Stacking Boxes(dp求解)
题目来源:https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=3&pa ...
- 【Luogu】P2254瑰丽华尔兹(堆优化DP)
题目链接 我也不知道为什么脑子一抽就想了个堆优化……然后贼慢…… 因为上午听不懂wys的电音专场(快速傅立叶变换),然后就做了这么一道题. 首先朴素DP很sb都能秒出.就是枚举时刻.位置(两维)然后转 ...
- 征途堆积出友情的永恒「堆优化dp」
直接写题解: 很简单的dp暴力转移式子:f[i]=MAX{f[j]+max(tax[j],sum[i]-sum[j])} 观察式子,只有一个变量sum[i]; 而其他都为定量; 则考虑维护 两个定量: ...
- NOI.AC#2139-选择【斜率优化dp,树状数组】
正题 题目链接:http://noi.ac/problem/2139 题目大意 给出\(n\)个数字的序列\(a_i\).然后选出一个不降子序列最大化子序列的\(a_i\)和减去没有任何一个数被选中的 ...
- 洛谷P1725 琪露诺 (单调队列/堆优化DP)
显然的DP题..... 对于位置i,它由i-r~i-l的位置转移过来,容易得到方程 dp[i]=dp[i]+max(dp[i−r],...,dp[i−l]). 第一种:n2的暴力,只能拿部分分. 1 ...
- BZOJ 2809 [Apio2012]dispatching(斜堆+树形DP)
[题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=2809 [题目大意] 给出一棵树,求出每个点有个权值,和一个乘算值,请选取一棵子树, 并 ...
随机推荐
- docker 常用的容器命令
容器命令 # --name 给容器起名 # -p 端口映射 # -d 后台启动 # -it 交互模式启动 # 交互模式启动 # docker run -it 镜像名/id /bin/bash # do ...
- 基于FPGA的光口通信开发案例|基于Kintex-7 FPGA SFP+光口的10G UDP网络通信开发案例
前言 自著名华人物理学家高锟先生提出"光传输理论",实用化的光纤传输产品始于1976年,经历了PDH→SDH→DWDM→ASON→MSTP的发展历程.本世纪初期,ASON/OADM ...
- 07--Docker安装Redis
1.拉取redis:3.2 docker pull redis:3.2 2.创建redis容器 docker run -p 6379:6379 -v /zhengcj/myredis/data:/da ...
- Android N selectQualifiedNetwork分析
前言: 参考:Android N wifi auto connect流程分析 后续 Android 8.0/9.0 wifi 自动连接评分机制 分析 前面说了,handleScanResults会去调 ...
- LVS负载均衡理论以及算法概要
一. LVS简介 LVS是Linux Virtual Server的简称,也就是Linux虚拟服务器, 由章文嵩博士发起的自由软件项目,它的官方站点是www.linuxvirtualserver.or ...
- list里放map list 放list
Map<String,Integer> hashMap = new HashMap<String, Integer>(); Map<String,Integer> ...
- 一个基于protocol buffer的RPC实现
Protocol Buffer仅仅是提供了一套序列化和反序列化结构数据的机制,本身不具有RPC功能,但是可以基于其实现一套RPC框架. Services protocol buffer的Service ...
- 【LinuxShell】cp 用法详解
Linux cp命令主要用于复制文件或目录. -a:此选项通常在复制目录时使用,它保留链接.文件属性,并复制目录下的所有内容.其作用等于dpR参数组合. -d:复制时保留链接.这里所说的链接相当于Wi ...
- Shell 简单入门教程
大数据开发岗为什么要学习Shell呢?1)需要看懂大数据运维岗人员编写的Shell程序.2)偶尔会编写一些简单Shell程序来管理集群.提高开发效率 艺多不压身 Shell是一个命令行解释器,它接受应 ...
- 关于MinGW64的调试
学习的机房电脑能老了,都是xp系统.安装DEV C++后发现为MinGW64. 而我常用编译调试命令为: g++ -g *.cpp -o a gdb a 编译出的程序无法调试. 一直以为,根本就无法调 ...