DP
thy_asdf
我也不知道说什么...
展开
-
codeforces 580D Kefa and Dishes
传送门:http://codeforces.com/problemset/problem/580/d 思路:状压DP,f[i][j]表示最后一个为i,已选取的菜的状态为j。 #include #include #include const int maxt=540000; using namespace std; typedef long long ll; int n,m,k,g[2原创 2015-09-25 11:40:06 · 546 阅读 · 0 评论 -
codeforces568E.Longest Increasing Subsequence
传送门:http://codeforces.com/problemset/problem/568/E 思路:首先没有空位,我们是记录一个low数组表示长度为i的上升子序列的最小结尾。 对于一个末尾新的数x,我们只要二分出一个位置low[i] 现在有空位和m个数可用,每个数只能用一次。 其实每个数只能用一次这个条件并没有什么用,因为这是严格的LIS,用两次也没有用 所以可以先去重。 然后原创 2015-10-23 15:10:55 · 955 阅读 · 1 评论 -
codeforces572D. Minimization
传送门:http://codeforces.com/problemset/problem/572/D 思路:首先可以根据下标对k的模将他们分成互不相关的k组,组内可以贪心地使元素按大小顺序排,然后这组的贡献即为max-min 那我们就把a数组排序,那么每组元素一定是连续的。 那么题目就变为把有序数组a分为k组,其中第一种有n%k组,长度为(n/k+1),第二种有n-n%k组,长度为n/k原创 2015-10-23 16:22:21 · 439 阅读 · 0 评论 -
3999:孤独一生
传送门:然而并没有 题目大意: 思路:首先是O(n^2)的DP 设f[i][j]表示第1个集合结尾为i,第2个集合结尾为j,其中i>=j 分两种情况 f[i][j]=f[i-1][j]+|h[i]-h[i-1]| (i>j+1)(第2个集合结尾是j,那么j+1到i这一段都是第一个集合的) =min(f[j][k]+|h[i]-h[k]|) (i=j+1) (其中第一个集合结尾已原创 2015-10-30 08:33:32 · 364 阅读 · 0 评论 -
codeforces573D. Bear and Cavalry
传送门:http://codeforces.com/problemset/problem/573/d 思路:首先如果没有限制,那么根据排序不等式,肯定按顺序匹配战士和马最好。 但是现在有了战士不能和自己的马匹配的限制。 于是就有了一个重要的性质: 最优匹配的前提下,排序后第i号战士只会与[i-2,i+2]号马匹配 至于证明,可以自己YY,也可以分情况讨论(好像很复杂...) 于是就可以原创 2015-10-23 16:43:43 · 645 阅读 · 0 评论 -
APIO2015&2014题解
传送门:似乎uoj都有 思路: APIO2015: 巴厘岛的雕塑: 看到位运算,又要求结果最小,最外层肯定是个从高位到低位的按位贪心 这里有两个部分分, task1:N task2:N 先考虑task1 令sum[i]表示雕塑权值的前缀和 假设我们考虑到了第bit位 那么我们怎么知道在前面位数满足要求的前提下,当前位能否是0 DP即可 设f[i][j]表示前i原创 2016-04-26 10:03:20 · 1499 阅读 · 0 评论