Codeforces 467C. George and Job】的更多相关文章

题目 Source http://codeforces.com/contest/467/problem/C Description The new ITone 6 has been released recently and George got really keen to buy it. Unfortunately, he didn't have enough money, so George was going to work as a programmer. Now he faced t…
题目链接:http://codeforces.com/problemset/problem/467/C 题目意思:给出一条含有 n 个数的序列,需要从中找出 k 对,每对长度为 m 的子序列,使得 找出来的k对序列的总和相同.注意,同一个数不能在两个子序列中. 首先用了很暴力的做法,赛后发现过不了test 5 的时候,就知道需要用到 dp 来做了.看了这个人的提示: 其实看完这个状态转移方程,就觉得这题不太难了. dp[i][j]: 前 i 个数中,选择 j pairs 可以获得的最大和. 那么…
题目链接:http://codeforces.com/contest/467/problem/C 求k个不重叠长m的连续子序列的最大和. dp[i][j]表示第i个数的位置个序列的最大和. 前缀和一下就好了.空间可以优化,滚动数组就好了. //#pragma comment(linker, "/STACK:102400000, 102400000") #include <algorithm> #include <iostream> #include <cs…
DP.... C. George and Job time limit per test 1 second memory limit per test 256 megabytes input standard input output standard output The new ITone 6 has been released recently and George got really keen to buy it. Unfortunately, he didn't have enoug…
题目描述 新款手机 iTone6 近期上市,George 很想买一只.不幸地,George 没有足够的钱,所以 George 打算当一名程序猿去打工.现在George遇到了一个问题. 给出一组有 n 个整数的数列p_1,p_2,-,p_n ,你需要挑出 k 组长度为 m 的数,要求这些数互不重叠 即 [l_{1},r_{1}],[l_{2},r_{2}],-,[l_{k},r_{k}] (1<=l_{1}<=r_{1}<l_{2}<=r_{2}<-<l_{k}<=…
题目 参考了网页:http://www.xue163.com/exploit/180/1802901.html //看了题解,抄了一遍,眼熟一下,增加一点熟练度 //dp[i][j]表示是前i个数选出j段的最大值, //显然有不选这个数,和考虑这个数的两种情况. //而考虑这个数的话,因为连续性也只会增加以这个数为结尾的m序列 #include<stdio.h> #include<string.h> #include<algorithm> using namespace…
[链接] 我是链接,点我呀:) [题意] 让你从1..n这n个数字中 选出来k个不相交的长度为m的区间 然后这个k个区间的和最大 求出这k个区间的和的最大值 [题解] 设dp[i][j]表示前i个数字已经选出了j个区间的最大值 看看是以当前位置为结尾选择一个区间,还是这个位置不包括在任何一个区间里. 分这两种情况转移就好 [代码] import java.io.*; import java.util.*; public class Main { static InputReader in; st…
题目链接:http://codeforces.com/contest/387/problem/B 题目意思:给出1-n个问题,以及要满足是good rounde条件下这n个问题分别需要达到的complexity,最后还有George已经准备好的关于这些问题的m个complexity.问George要come up with的问题最少有多少个. 很明显要使问题最少,那么满足每个问题的complexity为一个即可.解决这个问题的关键是要理解这句话:He can simplify any alrea…
George and Cards 我们找到每个要被删的数字左边和右边第一个比它小的没被删的数字的位置.然后从小到大枚举要被删的数, 求答案. #include<bits/stdc++.h> #define LL long long #define fi first #define se second #define mk make_pair #define PLL pair<LL, LL> #define PLI pair<LL, int> #define PII pa…
这道题目的意思是对于每个要删除的数字,向前或向后找到一块连续的数字,而它是其中最小的: 很容易看出对于所有要先删除的数字要从大到小删除: 然后对于每个要删除的字母,要找到比他小的,但是在原数列中又靠它最近的数字: 这样的话,很直观最多只能用lg n的复杂度来处理这个问题: 可以用二分查找,也可以用set来代替: 考虑到前面删除的一些数字不能计算进去,还要一个快速计算区间和的算法,用树状数组和线段树都可以: 不过看到tags,上面写着还可以用dsu(disjoint set union)并查集来做…