动态规划——线性

Tyvj 1008 传球游戏

背景

NOIP2008复赛普及组第三题

描述

上体育课的时候,小蛮的老师经常带着同学们一起做游戏。这次,老师带着同学们一起做传球游戏。

游戏规则是这样的:n个同学站成一个圆圈,其中的一个同学手里拿着一个球,当老师吹哨子时开始传球,每个同学可以把球传给自己左右的两个同学中的一个(左右任意),当老师再次吹哨子时,传球停止,此时,拿着球没传出去的那个同学就是败者,要给大家表演一个节目。

聪明的小蛮提出一个有趣的问题:有多少种不同的传球方法可以使得从小蛮手里开始传的球,传了m次以后,又回到小蛮手里。两种传球的方法被视作不同的方法,当且仅当这两种方法中,接到球的同学按接球顺序组成的序列是不同的。比如有3个同学1号、2号、3号,并假设小蛮为1号,球传了3次回到小蛮手里的方式有1->2->3->1和1->3->2->1,共2种。

输入格式

输入文件ball.in共一行,有两个用空格隔开的整数n,m(3<=n<=30,1<=m<=30)。

输出格式

输出文件ball.out共一行,有一个整数,表示符合题意的方法数。

测试样例1

输入

3 3

输出

2

备注

40%的数据满足:3<=n<=30,1<=m<=20 
100%的数据满足:3<=n<=30,1<=m<=30

思路:

球可以由左边传过来,也可以从右边传过来,将环剖开,在没有传球的情况下求在小蛮的手里,设为一,然后把传球数定为阶段进行dp

代码:

 1 #include<iostream>
 2 using namespace std;
 3 int main(){
 4     int n,m,dp[100][100];
 5     cin>>n>>m;
 6     dp[1][0] = dp[1+n][0] = 1;
 7     for(int j = 1;j <= m;j++){
 8         for(int i = 1;i <= n;i++){
 9             if(i > 1) dp[i][j] = dp[i+n][j] = dp[i-1][j-1] + dp[i+1][j-1];
10             else dp[i][j] = dp[i+n][j] = dp[2*n][j-1] + dp[i+1][j-1];
11         }
12     }
13     cout<<dp[1][m]<<endl;
14     return 0;
15 } 

时间: 2024-08-04 10:08:25

动态规划——线性的相关文章

动态规划②——线性动态规划(背包)

二.线性动态规划 上次只能算一个热身,这次是真正的动态规划了.还是洛谷(http://www.luogu.org/problem/show?pid=1048):题目描述 Description辰辰是个天资聪颖的孩子,他的梦想是成为世界上最伟大的医师.为此,他想拜附近最有威望的医师为师.医师为了判断他的资质,给他出了一个难题.医师把他带到一个到处都是草药的山洞里对他说:“孩子,这个山洞里有一些不同的草药,采每一株都需要一些时间,每一株也有它自身的价值.我会给你一段时间,在这段时间里,你可以采到一些

动态规划——线性dp

我们在解决一些线性区间上的最优化问题的时候,往往也能够利用到动态规划的思想,这种问题可以叫做线性dp.在这篇文章中,我们将讨论有关线性dp的一些问题. 在有关线性dp问题中,有着几个比较经典而基础的模型,例如最长上升子序列(LIS).最长公共子序列(LCS).最大子序列和等,那么首先我们从这几个经典的问题出发开始对线性dp的探索. 首先我们来看最长上升子序列问题. 这个问题基于这样一个背景,对于含有n个元素的集合S = {a1.a2.a3……an},对于S的一个子序列S‘ = {ai,aj,ak

动态规划——线性DP.1

动态规划算法通常用于求解具有某种最优性质的问题. 那它和贪心有区别吗? 当然有.不然叫动态规划干啥? 幼儿园英语老师:DP是啥? 小盆友:Dog&Peppa pig 英语老斯:恩恩!真聪明! 然而,你是小盆友吗? 如果是 如果不是, DP是D****** P*******的缩写. 意思是动态规划. 聪明的bolt告诉你:是Dynamic Programming的缩写!!! 动态规划注重     表示状态,转移状态 so 讲一个栗子: LIS: 最长上升子序列 这是线性动态规划中最经典的栗子之一.

51nod1055 最长等差数列

基准时间限制:2 秒 空间限制:262144 KB 分值: 80 N个不同的正整数,找出由这些数组成的最长的等差数列. 例如:1 3 5 6 8 9 10 12 13 14 等差子数列包括(仅包括两项的不列举) 1 3 5 1 5 9 13 3 6 9 12 3 8 13 5 9 13 6 8 10 12 14 其中6 8 10 12 14最长,长度为5. Input 第1行:N,N为正整数的数量(3 <= N <= 10000). 第2 - N+1行:N个正整数.(2<= A[i] &

Bzoj1237 [SCOI2008]配对

Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 1446  Solved: 551 Description 你有n 个整数Ai和n 个整数Bi.你需要把它们配对,即每个Ai恰好对应一 个Bp[i].要求所有配对的整数差的绝对值之和尽量小,但不允许两个相同的数配 对.例如A={5,6,8},B={5,7,8},则最优配对方案是5配8, 6配5, 8配7,配对整数 的差的绝对值分别为2, 2, 1,和为5.注意,5配5,6配7,8配8是不允许的,因 为

信息学竞赛知识点一览

C++语言 基础算法 位运算 快速幂 模拟 枚举 递推 递归 分治 二分 三分 排序 归并排序 离散化 倍增 贪心 高精度 数据结构 前缀和 差分 栈 对顶栈 单调栈 队列 双端队列 循环队列 单调队列 ST表 链表 链式前向星 Hash表 二叉堆 Huffman树 并查集 路径压缩 按秩合并 扩展域 边带权 树状数组 线段树 延迟标记 扫描线 动态开点线段树 分块 莫队 点分治 BST 平衡树 Treap Splay 红黑树 AVL SBT 替罪羊树 LCT CDQ分治 三维偏序 整体二分 可

线性动态规划

准确来说,动态规划是一种思想,而不是一种算法.算导里将它归结为——高级程序设计技巧. 在线性结构上进行状态转移DP,统称线性DP. 线性DP最常见的有: 子集和问题,LIS问题,LCS问题. 拓展之后有:子段和问题,杂类问题. 1. 子集和问题和硬币计数问题 子集和问题的一个实例: 〈S,t〉.其中,S={ 1 x , 2 x ,…, n x }是一个正整数的集合,c是一个正整数.子集和问题判定是否存在S的一个子集S1,使得s1中的各元素之和等于c. 这其实就是0/1背包. 硬币计数问题的一个实

动态规划之线性动归

线性规划是一类问题.目标函数为特定变量的线性函数,约束是这些变量的线性不等式(standard form)或等式(slack form),目的是求目标函数的最大值或最小值.这类动态规划是平时比较常见的一类动态规划问题. 一.钢条切割问题: 假设公司出售一段长度为i英寸的钢条的价格为Pi(i = 1, 2, -单位:美元),下面给出了价格表样例: 长度i  1  2  3  4  5 6 7 8 9 10 价格Pi  1 5 8 9 10 17 17 20 24 30 切割钢条的问题是这样的:给定

POJ-1458 LCS(线性动态规划)

此题经典线性动态规划. 代码如下: #include<iostream> #include<cstdio> #include<cstdlib> #include<cstring> #include<algorithm> using namespace std; const int maxn=505; int d[maxn][maxn]; int main(void){ string a,b; while(cin>>a>>b