题目:https://www.lydsy.com/JudgeOnline/problem.php?id=4881 连题意都转化不了了... 题意是要求从一个数列中选出两个上升序列的方案数: 先判断是否有解,如果最长下降子序列长度>2(有两条以上的线相互交织)则无解,先用树状数组判断一下: 分成一个个“连通块”来考虑,相互交织的几条线为一个连通块,连通块之间互不影响: 在 set 中留一个最大的元素作为此连通块的代表,也判断下一个元素是否在同一个连通块: 每个连通块有两种选法,所以最后答案就是 2…
相当于将线段划分成两个集合使集合内线段不相交,并且可以发现线段相交等价于逆序对.也即要将原序列划分成两个单增序列.由dilworth定理,如果存在长度>=3的单减子序列,无解,可以先判掉. 这个时候有两种显然的暴力. 将点集划分成两部分使内部无边显然就是二分图,于是第一种暴力是在逆序对之间连边,答案即为2连通块个数,因为每个连通块都可以交换黑白点.问题在于暴力连边是n2的,而显然实际有用的边其实只有O(n)条.考虑这样一种连边方式:每个点向后缀最小值.前缀第一个比他大的点连边.瞎归纳归纳就可以证…
题意:给出m,序列第i位是第i-1位的至少2倍大,的求长度为n且每一位范围均在1-m的序列方案数 对求方案数做不到信手拈来的感觉,需要加强 用简单的预处理和最优子结构能优化到很不错的效率了 #include<iostream> #include<algorithm> #include<cstdio> #include<cstring> #include<cstdlib> #include<cmath> #include<stri…
4881: [Lydsy1705月赛]线段游戏 Time Limit: 3 Sec  Memory Limit: 256 MBSubmit: 359  Solved: 205[Submit][Status][Discuss] Description quailty和tangjz正在玩一个关于线段的游戏.在平面上有n条线段,编号依次为1到n.其中第i条线段的两端点坐 标分别为(0,i)和(1,p_i),其中p_1,p_2,...,p_n构成了1到n的一个排列.quailty先手,他可以选择一些互不…
Description quailty和tangjz正在玩一个关于线段的游戏.在平面上有n条线段,编号依次为1到n.其中第i条线段的两端点坐 标分别为(0,i)和(1,p_i),其中p_1,p_2,...,p_n构成了1到n的一个排列.quailty先手,他可以选择一些互不相交 的线段,将它们拿走,当然他也可以一条线段也不选.然后tangjz必须拿走所有剩下的线段,若有两条线段相交, 那么他就输了,否则他就赢了.注意若quailty拿走了全部线段,那么tangjz也会胜利.quailty深深喜欢…
题目描述 quailty和tangjz正在玩一个关于线段的游戏.在平面上有n条线段,编号依次为1到n.其中第i条线段的两端点坐标分别为(0,i)和(1,p_i),其中p_1,p_2,...,p_n构成了1到n的一个排列.quailty先手,他可以选择一些互不相交的线段,将它们拿走,当然他也可以一条线段也不选.然后tangjz必须拿走所有剩下的线段,若有两条线段相交,那么他就输了,否则他就赢了.注意若quailty拿走了全部线段,那么tangjz也会胜利.quailty深深喜欢着tangjz,所以…
[Lydsy1705月赛]失控的数位板 Time Limit: 30 Sec  Memory Limit: 256 MBSubmit: 148  Solved: 33[Submit][Status][Discuss] Description 绘画家小Q正在他的数位板上作画.当他在作画的时候,他的设备突然故障了!此时他的笔变成了擦除模式.在小Q 的脑海中,有一副漂亮的图案,他希望最后能将它呈现在板子上.他按照自己的创作风格,一步一步地绘画.他每 一步只可能是4种指令上(up)下(down)左(le…
Description quailty和tangjz正在玩一个关于线段的游戏.在平面上有n条线段,编号依次为1到n.其中第i条线段的两端点坐 标分别为(0,i)和(1,p_i),其中p_1,p_2,...,p_n构成了1到n的一个排列.quailty先手,他可以选择一些互不相交 的线段,将它们拿走,当然他也可以一条线段也不选.然后tangjz必须拿走所有剩下的线段,若有两条线段相交, 那么他就输了,否则他就赢了.注意若quailty拿走了全部线段,那么tangjz也会胜利.quailty深深喜欢…
4881: [Lydsy2017年5月月赛]线段游戏 Time Limit: 3 Sec  Memory Limit: 256 MBSubmit: 164  Solved: 81[Submit][Status][Discuss] Description quailty和tangjz正在玩一个关于线段的游戏.在平面上有n条线段,编号依次为1到n.其中第i条线段的两端点坐 标分别为(0,i)和(1,p_i),其中p_1,p_2,...,p_n构成了1到n的一个排列.quailty先手,他可以选择一些…
[题目描述] 给出一个正整数序列 a,长度为 n,cyb 不喜欢完美,他要删掉一些数(也可以不删,即删掉0个),但是他不会乱删,他希望删去以后,能将 a 分成 2 个集合,使得两个非空集合的数的和相同,现在他希望你能帮他算出删数的方案数. [输入文件] 第一行 n 个正整数 以下有 n行,每行1个 正整数表示整数序列a [输出文件] 一个整数表示答案 [输入样例] 4 1 2 3 4 [输出样例] 3 [数据范围] 30%:n<=5 100%:n<=20 100%:a 中每个元素<=10…
Nim Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 5545   Accepted: 2597 Description Nim is a 2-player game featuring several piles of stones. Players alternate turns, and on his/her turn, a player’s move consists of removing one or mor…
Catalan数 前10项 \(1,1,2,5,14,42,132,429,1430,4862\) (注:从第\(0\)项起) 计算式 \(C_n=\frac{1}{n+1}\dbinom{2n}{n}\) \(C_{n+1}=\sum_{i=0}^nC_iC_{n-i}\) \(C_n=\dbinom{2n}{n}-\dbinom{2n}{n-1}\) \(C_n=\frac{4n-2}{n+1}C_{n-1}\) 组合意义 1.由\(n\)个\(+1\)和\(n\)个\(-1\)构成的\(2…
求lis的时候呢,我想n^2的做法是很简单的,二分的话除了最长不上升或最长不下降子序列不好求之外(毕竟要注意细节)于是从中发现了,求lis真正的序列也是十分不好求出的尤其是字典序最大的不上升序列了,什么的很难求的,当时好像打了hash,玄学找起点,优先队列维护.等等,可能不是很好的思路吧. 但是求方案数就不一样了并不需要一些堆什么的维护.多开一个数组在dp的时候进行维护即可我是这样想的并不是所有的方案数都是乘法原理,加法原理是乘法原理的分支,不能光想着乘法. 下面给出例题求不同的lis方案数.…
[题解]CJOI2019 登峰造鸡境 (Prufer序列+斯特林数) 题目背景 舒服了. 题目描述 你有一颗n个点的无根树,每个点有有一个标号(1~n). 现在你知道,总共有m个叶子节点,求不同的树的形态方案数. 答案对\(10^9+7\)取模. 下面是一些可能有用的定义: 叶子:度数为1的点. 不同:若对于两颗标号相同的树\(T1=(V,E_1),T2=(V,E_2)\),\(T1\neq T2\)当且仅当存在\((u,v) \in E_1 ,(u,v) \notin E_2\) 输入格式 一…
题目描述 给定一个长为n的整数序列(n<=1000),由A和B轮流取数(A先取).每个人可从序列的左端或右端取若干个数(至少一个),但不能两端都取.所有数都被取走后,两人分别统计所取数的和作为各自的得分.假设A和B都足够聪明,都使自己得分尽量高,求A的最终得分. 输入输出格式 输入格式: 第一行,一个正整数T,表示有T组数据.(T<=100) 接着T行,每行第一个数为n,接着n个整数表示给定的序列. 输出格式: 输出T行,每行一个整数,表示A的得分 输入输出样例 输入样例#1: 复制 2 1…
1.http://codeforces.com/problemset/problem/149/D 2.题目大意 给一个给定括号序列,给该括号上色,上色有三个要求 1.只有三种上色方案,不上色,上红色,上蓝色 2.每对括号必须只能给其中的一个上色 3.相邻的两个不能上同色,可以都不上色 求0-len-1这一区间内有多少种上色方案,很明显的区间DP dp[l][r][i][j]表示l-r区间两端颜色分别是i,j的方案数 0代表不上色,1代表上红色,2代表上蓝色 对于l-r区间,有3种情况 1.if(…
题目链接:https://projecteuler.net/problem=409 题目: 题解: 题目问你必胜态的数目,我们考虑用总的方案数减去必败态的方案数(NIM游戏没有平局这个操作) 必败态的方案数就是让我们构造一个长度为n的数列,要求没有重复的数,每一数的值在[1,$2^n-1$]之间,且所有数异或和为0(这个就不需要证明了吧,不过我以前的一篇取石子的博客里好像有证明) 设$f[n]$表示长度为$n$的这样的数列的方案数 显然$f[1]=f[2]=0$ 考虑对于$f[i]$怎么转移,设…
传送门 解题思路 看第一个要求,很显然是求最长下降子序列,和LIS几乎一样,很简单,再看第二个问号,求最长下降子序列的方案数??这怎么求? 注意:当二种方案“看起来一样”时(就是说它们构成的价格队列一样的时候),这2种方案被认为是相同的. 这里就用到了一种基于dp的dp. 我们用a[i]存原来的数,f[i]存以第i个数结尾的最长下降子序列的长度,t[i]存以i结尾的最长下降子序列的方案数. f[i]照常求,那么t[i]不能重复,怎么求呢? 首先,对于每一个i,枚举j=1...i-1. 若f[i]…
题目描述 “低价购买”这条建议是在奶牛股票市场取得成功的一半规则.要想被认为是伟大的投资者,你必须遵循以下的问题建议:“低价购买:再低价购买”.每次你购买一支股票,你必须用低于你上次购买它的价格购买它.买的次数越多越好!你的目标是在遵循以上建议的前提下,求你最多能购买股票的次数.你将被给出一段时间内一支股票每天的出售价(2^16范围内的正整数),你可以选择在哪些天购买这支股票.每次购买都必须遵循“低价购买:再低价购买”的原则.写一个程序计算最大购买次数. 这里是某支股票的价格清单: 日期 1 2…
B. Appleman and Tree time limit per test 2 seconds memory limit per test 256 megabytes input standard input output standard output Appleman has a tree with n vertices. Some of the vertices (at least one) are colored black and other vertices are color…
题目描述 小明的花店新开张,为了吸引顾客,他想在花店的门口摆上一排花,共m盆.通过调查顾客的喜好,小明列出了顾客最喜欢的n种花,从1到n标号.为了在门口展出更多种花,规定第i种花不能超过ai盆,摆花时同一种花放在一起,且不同种类的花需按标号的从小到大的顺序依次摆列. 试编程计算,一共有多少种不同的摆花方案. 输入输出格式 输入格式: 第一行包含两个正整数n和m,中间用一个空格隔开. 第二行有n个整数,每两个整数之间用一个空格隔开,依次表示a1.a2.……an. 输出格式: 输出只有一行,一个整数…
题意:用13.23……k3这些数加起来组成n,输出总方案数 d(i, j)表示前i个数构成j的方案数则有 d(i, j) = d(i-1, j) + d(i, j - i3) 可以像01背包那样用滚动数组来实现 //#define LOCAL #include <iostream> #include <cstdio> #include <cstring> using namespace std; ; ]; int main(void) { #ifdef LOCAL fr…
传送门:>Here< 题意:给出一张有向图,问从点A到点B恰好经过k个点(包括终点)的路径方案数 解题思路 一道矩阵乘法的好题!妙哉~ 话说把矩阵乘法放在图上好神奇,那么跟矩阵唯一有关的就是邻接矩阵…… 考虑邻接矩阵在这道题里的含义也就是从A到B经过1个点的方案数——能到达或不能到达.而当邻接矩阵自乘时,假设自乘一次得到矩阵B,则$b[i][j] = \sum\limits_{}{}g[i][k]*g[k][j]$.因此k就作为了枚举的中介点,由于最后得到的项是累积的,所以自乘一次以后就得到了…
P2347 砝码称重 DP做法 : 转化为 01背包. 进行方案数 更新.最后统计种类. #include<bits/stdc++.h> using namespace std; #define maxn 1234 int n,k,dp[maxn],len,sum,ans; int a[11]= {0,1,2,3,5,10,20}; vector<int>p; int main() { for(int i=1; i<=6; i++) { scanf("%d"…
题意 题目链接 分析 先考虑没有障碍怎么做,定义 f(i,j,k) 每一维走了 i,j,k 位的方案数,转移乘个组合数即可. 现在多了一些障碍,考虑容斥.实际我们走过的点都有严格的大小关系,所以先把所有障碍点按维度排序,然后定义 g(i,j) 表示走到 i 这个障碍点,走了 j 个障碍点的方案数,利用 f 转移.实际第二维在转移时乘以-1就可以忽略. 复杂度 \(O(o^2)\) 开始写的刷表发现有问题,因为刷表时的所有状态都和 (n,m,r) 有关,所以中间的状态不能表示和终态一样的意义. 代…
P1430 序列取数 题目描述 给定一个长为\(n\)的整数序列\((n<=1000)\),由\(A\)和\(B\)轮流取数(\(A\)先取).每个人可从序列的左端或右端取若干个数(至少一个),但不能两端都取.所有数都被取走后,两人分别统计所取数的和作为各自的得分.假设\(A\)和\(B\)都足够聪明,都使自己得分尽量高,求\(A\)的最终得分. 输入输出格式 输入格式: 第一行,一个正整数\(T\),表示有\(T\)组数据.\((T<=100)\) 接着\(T\)行,每行第一个数为\(n\)…
n个点 m条路 询问T次 从a点走到b点刚好k步的方案数是多少 给定一个有向图,问从A点恰好走k步(允许重复经过边)到达B点的方案数mod p的值把 给定的图转为邻接矩阵,即A(i,j)=1当且仅当存在一条边i->j.令C=A*A,那么C(i,j)=ΣA(i,k)*A(k,j),实际上就 等于从点i到点j恰好经过2条边的路径数(枚举k为中转点).类似地,C*A的第i行第j列就表示从i到j经过3条边的路径数 Sample Input4 4 // n m0 10 21 32 32 //T0 3 2…
N个方块排成一列 用红,蓝,绿,黄4种颜色去涂色,求红色方块 和绿色方块个数同时为偶数的 方案数 对10007取余 Sample Input 212Sample Output 2//(蓝,黄)6//(红红,蓝蓝,蓝黄,绿绿,黄蓝,黄黄) # include <iostream> # include <cstdio> # include <cstring> # include <algorithm> # include <map> # includ…
题解 这个出题人完美诠释了什么叫 用心出题,用脚造数据 算完复杂度怎么也得\(O(o^2 * 200)\)略微跑不满,但是有8个测试点虽然有障碍但是一个障碍都不在路径上,2个测试点只有10来个点在路径上 这么轻松愉快的嘛???? 如果没有障碍的话只和\(1\)的数量有关 那么我们设\(dp[i][j][k]\)表示第一维有\(i\)个\(1\)第二维有\(j\)个\(1\)第三维有\(k\)个\(1\)的方案数 转移的时候枚举哪一位增加了多少1 方案数是 \(\binom{i}{h}\cdot…
题意:给定无向图,让你给点加权(1,2,3),使得每条边是两端点点权和维奇数. 思路:一个连通块是个二分图,判定二分图可以dfs,并查集,2-sat染色. 这里用的并查集(还可以带权并查集优化一下,或者干脆用dfs). 计数的时候每个连通块单独考虑,我们从连通块的第一个点开始dfs,如果是该填奇数点,那么当前方案数*=2:分第一个点奇偶两种情况即可. (多组输入一定注意初始化,这次CF多组输入好坑啊... #include<bits/stdc++.h> #define ll long long…