CodeForces 332B Maximum Absurdity
2016-03-27 18:58
183 查看
题目大意:
给出一个序列,让找出不互相覆盖的两个长度为k的段,问在两个段的权值和最大的情况下,按照左边段的左端点排序,右边段的左端点作为第二关键字排序,得到的第一个答案。
题目分析:
dp:dp1[maxn],dp2[maxn]; dp1【i】表示前i项连续k段最大值,dp2【i】表示后n-i项连续k段最大值,然后做一次循环就好#include <cstdio> #include <iostream> #include <cstring> #include <string> #include <cstdlib> #include <algorithm> #include <cmath> #include <vector> #include <set> #include <list> #include <queue> #include <map> #include <stack> using namespace std; #define L(i) i<<1 #define R(i) i<<1|1 #define INF 0x3f3f3f3f #define pi acos(-1.0) #define eps 1e-3 #define maxn 200010 #define MOD 1000000007 int n,k,d; long long a[maxn]; long long sum[maxn]; pair<long long,int> dp1[maxn],dp2[maxn]; int main() { int t,C = 1; while(scanf("%d%d",&n,&k) != EOF) { for(int i = 1; i <= n; i++) scanf("%I64d",&a[i]); sum[0] = 0; for(int i = 1; i <= n; i++) sum[i] = sum[i-1] + a[i]; dp1[k].first = sum[k]; dp1[k].second = 1; dp2[n-k+1].first = sum - sum[n-k]; dp2[n-k+1].second = n-k+1; for(int i = k+1; i <= n; i++) { if(sum[i] - sum[i-k] > dp1[i-1].first) { dp1[i].first = sum[i] - sum[i-k]; dp1[i].second = i - k + 1; } else { dp1[i].first = dp1[i-1].first; dp1[i].second = dp1[i-1].second; } } for(int i = n-k; i > 0; i--) { if(sum[i+k-1] - sum[i-1] >= dp2[i+1].first) { dp2[i].first = sum[i+k-1] - sum[i-1]; dp2[i].second = i; } else { dp2[i].first = dp2[i+1].first; dp2[i].second = dp2[i+1].second; } } long long sum = -INF; int aa,bb; for(int i = k; i + k <= n; i++) { if(dp1[i].first + dp2[i+1].first > sum) { sum = dp1[i].first + dp2[i+1].first; aa = dp1[i].second; bb = dp2[i+1].second; } } printf("%d %d\n",aa,bb); } return 0; }
相关文章推荐
- CentOS开机简要流程
- hdu2795 Billboard 线段树单点更新区间最值
- 20159318《网络攻防技术与实践》第4周学习总结
- codeforces 652D Nested Segments 离散化+树状数组
- 数组02
- 幸福其实很简单
- 第58课:使用Java和Scala在IDE中开发DataFrame实战学习笔记
- Lintcode 合并两个排序的链表
- CentOS7下JDK 安装错误 could not find libjava.so
- JVMGC——垃圾收集器的分类
- onWindowFoucusedChanged
- Android studio遇到在真机运行时出现adb not respond if you would like to retry问题解决方法
- Uva299——Train Swapping
- resin 4.0数据源的配置
- 环形数组最大子数组之和
- hdu5652
- cornerStone查看日志出错:Could not contact repository to read the latest log entries
- 数据库的基本操作
- JAVA基础总结(1)
- Swift2中的标准函数