2825 codevs危险的组合(递推)

2825 危险的组合

时间限制: 1 s

空间限制: 64000 KB

题目等级 : 钻石 Diamond

题目描述 Description

有一些装有铀(用U表示)和铅(用L表示)的盒子,数量均足够多。要求把N个盒子放成一行,但至少有3个U放在一起,有多少种方法?

输入描述 Input Description

包含一个整数N

输出描述 Output Description

输出一个整数表示方法数。

样例输入 Sample Input

样例1:4

样例2:5

样例输出 Sample Output

样例1:3

样例2:8

数据范围及提示 Data Size & Hint

对于100%的数据(3<=N<=30)

样例1解释:

UUUL、LUUU、UUUU

样例2解释:

UUUUL、UUUUU、UUULU、UUULL、LUUUU、LUUUL、ULUUU、LLUUU

【思路】

当加入第n个的时候有两种情况(1 )前面的n-1个已经满足了,而第n个要么是u要么是l,所以这这情况有 2*num(n-1)种

当加入第n个的时候,前面的n-1种没有满足情况,所以n-1个前面几个排列一定是 uul。。。 所以在前面加入一个u正好满足要求 就是UUUl...(第一个u是新加的 )

而后面n-4个一共的情况(包括三个u没有挨在一起的)pow(2,n-4)种情况,再减去num(n-4)(也就是减去n-4个排列满足三个u在一起的情况,因为我们现在是找n-1个不满足的情况)。

就推出递推式了  做出来了  爽QWQ

【代码】

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<cstdlib>
 4 #include<cmath>
 5 using namespace std;
 6 int n;
 7 int num(int x)
 8 {
 9     if(x<3)return 0;
10     if(x==3)return 1;
11     if(x==4)return 3;
12     return 2*num(x-1)+pow(2,x-4)-num(x-4);
13 }
14 int main()
15 {
16     scanf("%d",&n);
17     printf("%d",num(n));
18     return 0;
19 }
时间: 2024-10-06 19:43:16

2825 codevs危险的组合(递推)的相关文章

Codeforces Round #526 C - The Fair Nut and String /// 组合递推

题目大意: 给定原字符序列 找出其中所有子序列满足 1.序列内字符都为a 2.若有两个以上的字符 则相邻两个字符在原序列中两者之间存在字符b 的数量 将整个字符序列用b分开 此时再得到每个b之间a的数量 即 abbgaaba 得到 v[] = { 1 0 2 1 } 此时假设到第 i-1 段 已得到在第 i-1 段内的所有方案数为 ans (长度为1.2.3.... .i-1) 则在第 i 段时 可由前一段的方案数 和 当前段数量 组合得到ans*v[ i ] (长度为2.3.4.... .i)

UVA 557 Burger 排列组合递推

When Mr. and Mrs. Clinton's twin sons Ben and Bill had their tenth birthday, the party was held at the McDonald's restaurant at South Broadway 202, New York. There were 20 kids at the party, including Ben and Bill. Ronald McDonald had made 10 hamburg

递推,求至少连续放置三个U的危险组合

题意 有两种方块,L和U,有至少三个连续的U称为危险组合,问有多少个危险组合 solution: 至少这个概念比较难求 ,所以转化为(1ll<<n)-安全组合 dp[n][i]表示前n个数里以i个U结尾的个数 递推方程 dp[i][0]=dp[i-1][0]+dp[i-1][1]+dp[i-1][2]; dp[i][1]=dp[i-1][0]; dp[i][2]=dp[i-1][1]; 1 #include<iostream> 2 #include<cstdio> 3

Yue Fei&#39;s Battle(组合计数递推)

//求一个直径为 k 的树有多少种形态,每个点的度不超过 3 // 非常完美的分析,学到了,就是要细细推,并且写的时候要细心 还有除法取模需要用逆元 #include <iostream> #include <stdio.h> #include <string.h> #include <math.h> #include <stdlib.h> using namespace std; #define MOD 1000000007 #define L

【66测试20161115】【树】【DP_LIS】【SPFA】【同余最短路】【递推】【矩阵快速幂】

还有3天,今天考试又崩了.状态还没有调整过来... 第一题:小L的二叉树 勤奋又善于思考的小L接触了信息学竞赛,开始的学习十分顺利.但是,小L对数据结构的掌握实在十分渣渣.所以,小L当时卡在了二叉树. 在计算机科学中,二叉树是每个结点最多有两个子结点的有序树.通常子结点被称作“左孩子”和“右孩子”.二叉树被用作二叉搜索树和二叉堆.随后他又和他人讨论起了二叉搜索树.什么是二叉搜索树呢?二叉搜索树首先是一棵二叉树.设key[p]表示结点p上的数值.对于其中的每个结点p,若其存在左孩子lch,则key

HDU 5459 Jesus Is Here (递推)

有点麻烦的递推,看的时候请耐心,递推的时候不要有嵌套,向小的问题方向分解,然后注意边界. 字符串的递推式为 定义f为Si中的总长度 首先可以得到 然后考虑Si-2和Si-1之间的组合 为了得到小的问题,进行拆分 为了以后表示的方便和逻辑上的清晰,把Si~Si之间的组合总长度定义出来 因为这里的si-2和si-2的中间还有一段Si-3 所以其组合总长度就可以表示为 Ci表示Si中cff出现的次数,Li表示Si的长度 定义一个函数ccl 最后还剩下一个部分Si-2和Si-3 定义 至此,总方案已经可

【DP】一道递推题。。。

Bob想要构造一张由n个节点构成的图.构造的过程由两步组成:首先Bob会取出n个孤立的点,并把它们从1到n编号,然后对每个节点用一种颜色染色,Bob一共可以使用K种不同的颜色.接下来Bob会在这张图中加入一些有向边,对于每一个编号范围在[2,n]的节点i,Bob有可能选择一个节点j满足j < i并且节点i与j的颜色不同,然后加入一条从i到j的有向边,对于节点i,Bob也有可能不加任何的有向边.现在你需要回答Bob有可能构造出多少种不同的图. 输入: 第一行包含三个整数n,K. 输出: 输出一个整

矩阵乘法递推的优化艺术

对于一个线性递推式,求它第项的值,通常的做法是先构造一个的矩阵,然后在时间内求出. 其实,由于这个矩阵的特殊性,可以将时间优化到.接下来我会以一个题目来讲解矩阵乘法递推的优化. 题目:http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1229 题意:设,求的值.其中,和 . 前言:本题如果用普通的矩阵做法,很明显会TLE.那么我们要对这个特殊的矩阵进行时间上的优化. 分析:本题主要可用两种方法解决,分别是错位相减和矩阵乘法

递归--递推之组合数

排列在上一篇中已经写到,是个典型的深搜题,下面是介绍的组合数, 组合的基本定义是, 但是除了用这种传统的方法来求,可以用递归的方式或者是递推的方式来求, 说道递推,只要会递归, 就会递推了.关键的一部是递推式,可以定义一个函数func(int n, int k); 表示求的值,公式先放在这func(n, k) = func(n-1, k-1)+func(n-1,k); 意思就是在n中选去k个数的组合一个多少个,这时就要分两种情况, 一种是选出一组数中包含最后一个元素,它的值就是func(n -