随笔分类 -  动态规划

摘要:首先求出以每个数为开头上升序列长度,即倒着做最长下降子序列 然后,把字典序尽量小的放前面 即若要求的序列长度为x,如果以第一个数(字典序最小的数)开头的最长上升子序列大等于x,则将它放在答案第一个,第二个数开头小于x,则舍弃,第三个大于x-1,放答案第二个,以此类推 1 #include<algor 阅读全文
posted @ 2016-03-31 22:24 Yangjiyuan 阅读(188) 评论(0) 推荐(0)
摘要:首先使用DP预处理,先求出,在不考虑每种硬币个数的限制的情况下,每个钱数有多少种拼凑方案。 为了避免重复的方案被转移,所以我们以硬币种类为第一层循环,这样阶段性的增加硬币。 一定要注意这个第一层循环要是硬币种类,并且初始 f[0] = 1。 之后对于每个询问 (A1, A2, A3, A4, S) 阅读全文
posted @ 2016-03-25 21:04 Yangjiyuan 阅读(239) 评论(0) 推荐(0)
摘要:设F[i][j]表示在第i首歌曲结束后,音量能否刚好为j 转移:F[i][j]=F[i][j-C[i]] or F[i][j+C[i]] 初始化:F[0][beginlevel]=true 最后在所有F[N][j]中找到F[N][j]为true的且要让j尽量大。 如果所有0<=j<=maxlevel 阅读全文
posted @ 2016-03-25 21:03 Yangjiyuan 阅读(175) 评论(0) 推荐(0)
摘要:题意:就是说一开始一个序列是空的,然后每次可以将连续的一段染成同一颜色,问多少次才能到目标状态。 一开始想的是二分,然后题解DP。。。 f[i][j]表示区间[i,j]需要染色多少次 首先初始状态是f[i][i]=1和f[i][i+1]=str[i]==str[i+1] 然后从短区间地推到长区间 对 阅读全文
posted @ 2016-03-25 21:00 Yangjiyuan 阅读(238) 评论(0) 推荐(0)
摘要:看了数据范围,想想这不暴力可以过?? DP #include<algorithm> #include<iostream> #include<cstdlib> #include<cstring> #include<cstdio> #include<cmath> using namespace std; 阅读全文
posted @ 2016-03-25 20:56 Yangjiyuan 阅读(279) 评论(0) 推荐(0)
摘要:递推+环状特殊处理+高精度 #include<algorithm> #include<iostream> #include<cstdlib> #include<cstring> #include<cstdio> #include<cmath> using namespace std; int n; 阅读全文
posted @ 2016-03-25 17:39 Yangjiyuan 阅读(213) 评论(0) 推荐(0)