Gym 101334E dp】的更多相关文章

分析: 这一题给出的遍历的点的序列,不是树的中序遍历,前序遍历,只要遇到一个节点就打印一个节点.关键点就在,这个序列的首字母和尾字母一定要相同,因为最终都会回到根节点,那么每一个子树也一样. 状态: d[i][j]表示i至j的状态数 d[i][j]= d[i][j]=(d[i][j]+dp(i,k)*dp(k+1,j-1)%mod)%mod; #include <bits/stdc++.h> using namespace std; typedef long long ll; const in…
http://codeforces.com/gym/101334 题意: 给出一棵多叉树,每个结点的任意两个子节点都有左右之分.从根结点开始,每次尽量往左走,走不通了就回溯,把遇到的字母顺次记录下来,可以得到一个序列. 思路:d[i][j]表示i~j的序列所对应的子树. 边界条件就是d[i][i]=1. 每次可以分为两个分支:d[i+1][k-1]和d[k][j]. 递归求解. #include<iostream> #include<algorithm> #include<c…
题意:给定一个先序遍历序列,问符合条件的树的种类数 解题关键:枚举分割点进行dp,若符合条件一定为回文序列,可分治做,采用记忆化搜索的方法. 转移方程:$dp[i][j] = \sum {dp[i + 1][k - 1]*dp[k][j]} $ 令$dp[i][j]$表示i到j里数量 1.记忆化搜索 #include <bits/stdc++.h> using namespace std; typedef long long ll; const int mod=1e9; ll dp[][];…
Gym - 101964I 题意 有一个数组\(p\),如果满足\(i<j,p_i>p_j\),则\(i,j\)之间就有一条边相连,问存在多少个集合满足集合内的元素互不相连,且集合外的元素都有边连到集合内. 思路 现在给你\(p\)数组相连的边, 然后就可以暴力还原\(p\)数组,可以先记录有当前\(i\)位置之小于\(i\)位置的数字的数数量\(k\),然后从小到大找能用的第\(k\)大的数字就是位置\(i\)的数字 还原完\(p\)数组,我们可以发现如果你的子序列是上升序列,那么它们直接互…
题目链接:https://vjudge.net/contest/273260#problem/C 学习了一下别人的思路,首先去重,然后离散化. dp数组开二维,每一次更新,状态转移方程,dp[ i ][ j ] = (dp[ i-1] [ j ]+dp[ i-1] [ j -1 ]*(ans[ i ]))%mod; 第i种商品第j种(j<=k)的时候,等于第i-1个商品第j种的总方法数加上第i-1个的第j-1个乘以ans[i],ans数组记录的是这种商品当前有多少种. AC代码: #includ…
和51nod1055 一样: #include<iostream> #include<cstdio> #include<algorithm> #include<cstdlib> #include<cstring> #include<string> #include<cmath> #include<map> #include<set> #include<vector> #include&l…
题意:给定一个字符串,求有多少种树与之对应,对应方式是,每次遍历左节点,没有了,就回溯: 分析:d[i,j] = sum(d[i+1,k-1],d[k,j]) (str[i]==str[k]); 坑点是数组竟然要long long 不然会超时,神奇: #include <bits/stdc++.h> using namespace std; +; ; char str[maxn]; int d[maxn][maxn]; int dp(int i,int j) { ; ; int& an…
Problem E: Wooden Signs \[ Time Limit: 1 s \quad Memory Limit: 256 MiB \] 题意 给出一个\(n\),接下来\(n+1\)个数,前两个数表示最底下那层木板的左右边界,接下来\(n-1\)个数,每个数表示第\(i-1\)层那块木板的结束位置,开始位置要在上一层的边界上,并且这块木板必须和上一层的木板有重叠.问你一共有多少种摆放方法. 其实题中所说的箭头没有什么用 思路 令\(dp[i][j][k]\)表示第\(i\)层的木板边…
https://vjudge.net/contest/299302#problem/E 题意:给出一个01 0101串,然后能量计算是连续的1就按1, 2, 3的能量加起来.然后给出起始的能量,求最少减掉几个一是起始的能量不被消耗完. 思路:不能用贪心,比如11111,按理说拿一个最好是中间分开,但是那两次的这种情况下应该是要把第二个和第四个拿掉来最小 所以要用记忆化搜索或dp: 记忆化搜索 #include<bits/stdc++.h> using namespace std; ; ; in…
题目很水.睡过了迟到了一个小时,到达战场一看,俩队友AC五个了.. 就只贴我补的几个吧. B - Breaking Biscuits Gym - 101606B 旋转卡壳模板题.然后敲错了. 代码是另一种做法:对于每条边,枚举两边的所有点到直线的距离,分别取最大值,然后加起来. #include <bits/stdc++.h> #define FOPI freopen("in.txt", "r", stdin); #define FOPO freopen…
Fighting for Triangles 题目连接: http://codeforces.com/gym/100015/attachments Description Andy and Ralph are playing a two-player game on a triangular board that looks like the following: 1 2 3 4 5 7 8 6 9 10 11 13 14 16 17 12 15 18 At each turn, a playe…
Intervals 题目连接: http://codeforces.com/gym/100231/attachments Description Start with an integer, N0, which is greater than 0. Let N1 be the number of ones in the binary representation of N0. So, if N0 = 27, N1 = 4. For all i > 0, let Ni be the number…
Problem H. ICPC QuestTime Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/gym/100500/attachments Description Noura Boubou is a Syrian volunteer at ACM ACPC (Arab Collegiate Programming Contest) since 2011. She graduated from Tishreen Un…
Problem K. Kitchen Robot Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/gym/100610 Description Robots are becoming more and more popular. They are used nowadays not only in manufacturing plants, but also at home. One programmer wit…
Problem F "Folding" Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/gym/100002 Description Bill is trying to compactly represent sequences of capital alphabetic characters from 'A' to 'Z' by folding repeating subsequences insid…
D. Selection Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/gym/100114 Description When selecting files in an application dialog, Vasya noted that he can get the same selection in different ways. A simple mouse click selects a sing…
Problem D. Dinner ProblemTime Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/gym/100342/attachments Description A group of k students from Cooking University living in the campus decided that each day of the semester one of them will p…
H. Special Palindrome time limit per test:1 second memory limit per test:64 megabytes input:standard input output:standard output A sequence of positive and non-zero integers called palindromic if it can be read the same forward and backward, for exa…
G - Surf Gym - 100819S 思路 :有点类似 逆向背包DP , 因为这些事件发生后是对后面的时间有影响. 所以,我们 进行逆向DP,具体 见代码实现. #include<bits/stdc++.h> using namespace std; #define maxn 1000000 #define ll long long struct node { int start,len; ll w; bool operator<(const node &b)const…
题目链接:https://codeforces.com/gym/102056/problem/I Warm sunshine, cool wind and a fine day, while the girl watching is pursuing in chaos. Rikka reached out her hand and got the garland on her head, finding LCR with the immortal smile. The dream ended u…
题目链接:http://codeforces.com/gym/101873/problem/I 题意: 给出 $n(1 \le n \le 300000)$ 个单位时间,每个单位时间给出一个 $x_i(0 \le x_i \le 32)$ 代表该单位时间内视野内的敌人数目. 现在你有一个终极武器,每次使用可以消灭视野内所有敌人,但是需要 $m$ 个单位时间进行充能,且刚开始该武器是没有充能的. 这意味着,第一次可以使用该武器是在第 $m+1$ 个单位时间内,而往后若在第 $i$ 个单位时间使用则…
 2017 JUST Programming Contest 2.0 题目链接:Codeforces gym 101343 J.Husam and the Broken Present 2 J. Husam and the Broken Present 2 time limit per test:1.0 s memory limit per test:256 MB input:standard input output:standard output After you helped Husam…
题目链接:http://codeforces.com/gym/101128 感觉这个人写的不错的(我只看了题目大意):http://blog.csdn.net/v5zsq/article/details/61428924 Description n个小木条,一段前面有一个小箭头,给出第一个小木条的非箭头端端点横坐标以及每个小木条箭头端的坐标,现在要从下往上把这n’个木条按顺序叠放好,要求相邻两个小木条必须有一个共同端点且有交叠部分,问小木条有多少种放法 Input 第一行一整数n表示木条数量,之…
http://codeforces.com/gym/100676/attachments 题目大意: 有n个城市,有m条路,每条路都有边长,如果某几个城市的路能组成一个环,那么在环中的这些城市就有传送门,能够瞬间抵达对方的城市(即距离为0),否则,就要走这条路,并且经过的路程为这条路的长度. 问,找一个城市作为这些城市的首都 要求:除了首都城市外,其他城市到首都的最大距离最短. 思路: 边双连通缩点以后就是一棵树,找树上的直径,首都一定是直径上的点.(orz,自己明明注意到了一定是直径上面的点,…
http://codeforces.com/gym/100676 题目大意: 给你n个科目,m个关系,例如A->B,表示要学习B科目,一定要把A科目学习掉.同理,如果还有C->B,那么,B就要同时学掉A和C才能学B科目. 如果你是第k天学习这个科目,那么你的val += k * W[i],这个i表示你当天学的科目. 问,怎么学习让自己的val最大. 思路:状压dp 定义can[i],表示学习第i个科目之前,所需要的学习的集合是啥,然后判断(i & can[j]) == can[j],然…
Flight Boarding Optimization 题目连接: http://codeforces.com/gym/100269/attachments Description Peter is an executive boarding manager in Byteland airport. His job is to optimize the boarding process. The planes in Byteland have s rows, numbered from 1 t…
原题链接:http://codeforces.com/gym/100338/attachments/download/2136/20062007-winter-petrozavodsk-camp-andrew-stankevich-contest-22-asc-22-en.pdf 题意 给你n个点,让你连边,使得每个点的度至少为1,问你方案数. 题解 从正面考虑非常困难,应从反面考虑,取 i 点出来不连,这样的取法一共有C(n,i)种取法,其他的连好,而这样就是子问题了.那么dp[n]=2^(n…
题目链接:http://codeforces.com/gym/101147/problem/H 题解: 单纯的三维DP.可用递推或记忆化搜索实现. 学习:开始时用记忆化搜索写,dp[]初始化为0,结果一直走不出循环.后来发现:即使被搜过的位置,其值也可以是0,当再一次访问这个位置时,由于其值为0,就误以为这个位置没有搜过,于是再搜一遍.所以就不能用0来判断是否被搜索过.以后记忆化搜索就用-1来初始化dp[]吧,当然最稳的做法就是加个vis[]数组,看情况而定. 递推: #include <ios…
http://codeforces.com/gym/100801 题目大意:有从左到右有n个车站,有n-1种车票,第i种车票一次最多可以坐 i 站(1<=i<=n)   每种票有固定的价钱p[i],下车后可以继续上车,但每次下车都要再上车都要花费一定时间v[i],第1和n站上车不花费时间,车从一站到相邻的一站需要1分钟.只能买一种车票,问在t时间内 所有能从第1站到 第n站的方案  花费 的票价最低是多少. 解题思路: 这道题的关键在于如何求每种票起点到达终点所需的最少时间,如果找出了每种票到…
题目传送门 /* 题意:寻找一个根节点,求min f(u) = ∑ρ(v, u) * p(v).ρ(v, u)是u到v的距离,p(v)是v点的权值 树形DP:先从1出发遍历第一次,sum[u]计算u到所有子节点v的路径权值(之后的点路径有叠加,所以先把路径权值加后*w), 计算f[u](缺少u节点以上的信息).然后再遍历一遍,之前是DFS从下往上逆推,现在是顺推,把u节点以上的信息加上 dp的部分不是很多,两个DFS函数想了很久,还是没完全理解:( */ #include <cstdio> #…