51nod 1296 有限制的排列(DP)】的更多相关文章

对于一个i,如果要比邻居大,那么i比i-1大,i+1比i小,比邻居小同理.设v[i]=0表示i与i-1的关系无限制,v[i]=1表示a[i-1]>a[i],v[i]=2表示a[i-1]<a[i] 则有 显然这个是可以用前缀和优化成O(N^2)的 #include<iostream> #include<cstring> #include<cstdlib> #include<cstdio> #define MOD(x) (x>=mod?x-mo…
51nod 1293 球与切换器 | DP 题面 有N行M列的正方形盒子.每个盒子有三种状态0, -1, +1.球从盒子上边或左边进入盒子,从下边或右边离开盒子.规则: 如果盒子的模式是-1,则进入它的球从下面出去.(方向变为向下) 如果盒子的模式是+1,则进入它的球从右面出去. (反向变为向右) 如果盒子的模式是0, 则进入它的球方向不变.从上面进入的,从下面出去,从左面进入的,从右面出去. 球离开一个盒子,这个盒子的模式切换为相反数.已知,每个盒子的状态,扔k个球,它们都从左上角那个盒子的上…
在一个排列中,如果一对数的前后位置与大小顺序相反,即前面的数大于后面的数,那么它们就称为一个逆序.一个排列中逆序的总数就称为这个排列的逆序数. 如2 4 3 1中,2 1,4 3,4 1,3 1是逆序,逆序数是4. 1-n的全排列中,逆序数最小为0(正序),最大为n*(n-1) / 2(倒序) 给出2个数n和k,求1-n的全排列中,逆序数为k的排列有多少种? 例如:n = 4 k = 3. 1 2 3 4的排列中逆序为3的共有6个,分别是: 1 4 3 2 2 3 4 1 2 4 1 3 3 1…
在一个排列中,如果一对数的前后位置与大小顺序相反,即前面的数大于后面的数,那么它们就称为一个逆序.一个排列中逆序的总数就称为这个排列的逆序数. 如2 4 3 1中,2 1,4 3,4 1,3 1是逆序,逆序数是4.   1-n的全排列中,逆序数最小为0(正序),最大为n*(n-1) / 2(倒序) 给出2个数n和k,求1-n的全排列中,逆序数为k的排列有多少种? 例如:n = 4 k = 3.   1 2 3 4的排列中逆序为3的共有6个,分别是: 1 4 3 2 2 3 4 1 2 4 1 3…
题目:http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1327 因为一列填1个或0个(或0个!!!),而一行不知填多少个,所以按列dp. 发现 l 和 r 的限制略有不同.大约是 l 如果先不填的话,在列向右移动的过程中可能就不能填了:而 r 一旦遇到,之后想什么时候填都可以. 所以可以记录空下了几列,遇到 l 的右边界时再处理该行,即从之前空下的列中选一个给该行:如果一下有多个 l 的右边界,乘上一个排列即可. 对于…
DP Description 对于一个排列,考虑相邻的两个元素,如果后面一个比前面一个大,表示这个位置是上升的,用 I 表示,反之这个位置是下降的,用 D表示.如排列 3,1,2,7,4,6,5 可以表示为 DIIDID. 现在给出一个长度为 n-1的排列表示,问有多少种 1 到n 的排列满足这种表示. Input 一个字符串 S,S 由 I,D,?组成.?表示这个位置既可以为 I,又可以为 D 对于 20%的数据,S 长度 ≤ 10: 对于 100%的数据,S长度 ≤ 1000. Output…
题目链接:51nod 1412 AVL树的种类 开始做的时候把深度开得过小了结果一直WA,是我天真了.. #include<cstdio> #include<cstring> #include<algorithm> #include<queue> using namespace std; typedef long long ll; ; ; ll dp[N][];//dp[i][k] i:节点数, k:深度 void solve(){ int i, j, k;…
题目链接:51nod 1051 最大子矩阵和 实质是把最大子段和扩展到二维.读题注意m,n... #include<cstdio> #include<cstring> #include<vector> #include<algorithm> #define CLR(a,b) memset((a),(b),sizeof((a))) using namespace std; ; int dp[N][N]; int main(){ int n, m, i, j,…
1296: [SCOI2009]粉刷匠 Description windy有 N 条木板需要被粉刷. 每条木板被分为 M 个格子. 每个格子要被刷成红色或蓝色. windy每次粉刷,只能选择一条木板上一段连续的格子,然后涂上一种颜色. 每个格子最多只能被粉刷一次. 如果windy只能粉刷 T 次,他最多能正确粉刷多少格子? 一个格子如果未被粉刷或者被粉刷错颜色,就算错误粉刷. Input 输入文件paint.in第一行包含三个整数,N M T. 接下来有N行,每行一个长度为M的字符串,'0'表示…
题目:http://www.51nod.com/Challenge/Problem.html#!#problemId=1934 根据给出的信息,可以递归地把笛卡尔树建出来.一个点只应该有 0/1/2 个孩子,不然就是无解. dp[ cr ] 表示把 1~siz[cr] 填进 cr 这个子树的方案数.那么 \( dp[cr]=C_{siz[cr]-1}^{siz[ls]}*dp[ls]*dp[rs] \) . 注意在各种地方判断无解!如果是 l , cr , r 的话,左孩子应该是 l , ls…