bzoj1996】的更多相关文章

[BZOJ1996]合唱队(动态规划) 题面 BZOJ 题解 很容易的一道题 因为每个人不是放在了左边就是放在了右边 所以每次放好的人必定是原序列的一个子串 所以,很容易想到区间\(dp\) 设\(f[i][j]\)表示已经放好了第\(i\)个人到第\(j\)个人的方案数 因为不知道这个人的前面是当前序列的左端还是右端 所以再加一维\([0/1]\)表示上一个放的人在左边还是右边 然后分类讨论一下大力转移即可 #include<iostream> #include<cstdio>…
设f[i][j][0/1]表示i~j这段区间上一次选择的是最左/最右人的方案数.转移显然. #include<iostream> #include<cstdio> #include<cmath> #include<cstdlib> #include<cstring> #include<algorithm> using namespace std; int read() { ,f=;char c=getchar(); ;c=getcha…
[BZOJ1996][Hnoi2010]chorus 合唱队 Description Input Output Sample Input 4 1701 1702 1703 1704 Sample Output 8 HINT 题解:用f[i][j][0/1]表示从i开始往后j个人,最后一个人是i/i+j-1,的方案数.$O(n^2)$DP即可. #include <cstdio> #include <cstring> #include <iostream> using n…
很容易想到区间DP 然后发现这个区间只和圆序列的最后一个数有关,而原序列的最后一个数只可能是现在区间的头或者尾 令$f[i][j][0/1]$表示在区间$[i, j]$之间,原序列的最后一个数是当前区间的头/尾的总答案数 于是只要讨论$a[i], a[i + 1], a[j - 1], a[j]$之间的关系搞一搞就可以了 /************************************************************** Problem: 1996 User: raus…
OJ地址:http://www.lydsy.com/JudgeOnline/problem.php?id=1996 设dp(i,j,k)代表在理想结果中[i,j]段最后添加的是i或j(k=0or1) 要注意的一点是程序会计算两次i=j时的情况 要特殊判断 数据不大 我写的是记忆化搜索 改成递推会更快一点 #include<iostream> #include<cstdio> #include<cstring> using namespace std; +; ; ]; ]…
http://www.lydsy.com/JudgeOnline/problem.php?id=1996 f[i][j][0/1] 表示已经排出队形中的[i,j],最后一个插入的人在[i,j]的i或j 枚举顺序一: 先枚举区间长度,再枚举区间左端点 枚举顺序二: 先倒序枚举区间左端点,再枚举区间右端点 初始化: 当长度为2时,转移方程中的j==i+1,i==j-1 令f[i][j]只累加一次,所以f[i][i][0]=1 或者是 f[i][i][1]=1都行 #include<cstdio>…
Description Input Output Sample Input 4 1701 1702 1703 1704 Sample Output 8 HINT Solution 令$f_{i,j}$表示区间$[j,i+j]$在限定最后一个放$i$的情况下的方案数(之所以不是$[j,i]$,是因为那样不好滚动),$g_{i,j}$是限定最后一个放$i+j$的方案数. 转移时考虑上次放的是哪一个就可以了.要特殊处理$i=1$的情况. 代码: #include <algorithm> #inclu…
Description Input Output Sample Input 4 1701 1702 1703 1704 Sample Output 8 HINT 区间$dp$,首先每个点被放入队伍时队伍中所有人构成的序列中连续的一段 那么这个人在放入时一定是由最左边或最右边的人转移过来的,即由一段向外扩展转移 这就是一个基础的区间$dp$模型,注意细节即可 代码: #include<iostream> #include<cstdio> #define mod 19650827 us…
Description Input Output Sample Input 4 1701 1702 1703 1704 Sample Output 8 HINT Solution 辣鸡guide真难用Dev赛高!一道蛮水的区间DP 很容易发现,当前要放进来的人只和已经排出的队伍的两端的大小关系有关就很容易设计状态表示f[x][y][0/1]表示当前已经排好[x,y],且这次放的人在最左/最右边答案即为f[1][n][0]+f[1][n][1] 初始化状态要设f[i][i][0]=1答案记得取模…
合唱队 Time Limit: 4 Sec  Memory Limit: 64 MB[Submit][Status][Discuss] Description Input Output Sample Input 4 1701 1702 1703 1704 Sample Output 8 HINT Main idea 给定一个元素两两不相等的目标序列,每次按照给定方式将一个元素加入到序列当中,问得到目标序列的方案有几种.(加元素的方式:如果加的这个元素比上一个加入的元素小的话则放在队头,否则放在队…