FZU 2168
来源:互联网 发布:访客网络应该限速多少 编辑:程序博客网 时间:2024/05/21 05:04
#include<iostream>#include<cstdio>#include<cstring>using namespace std;#define N 1000009#define LL long longLL max(LL a, LL b){return a > b ? a : b;}LL sum[N],a[N];int main(){#ifdef CDZSCfreopen("i.txt", "r",stdin);#endifint n, m;while (~scanf("%d%d", &n, &m)){memset(sum, 0, sizeof(sum));for (int i = 0; i < n; i++)scanf("%lld", a + i);for (int i = 0; i < m; i++){sum[m-1] += a[i];}for (int i = m; i < n; i++){sum[i] = sum[i-1] - a[i - m]+a[i];}//for (int i = 0; i < n; i++)//printf("%d\n", sum[i]);LL ans =-1,temp=0;for (int i = 0; i < m; i++){temp+= a[i] * (i + 1);}//printf("%lld\n", temp);for (int i = m; i < n; i++){temp -= sum[i - 1];temp += m*a[i];ans = max(ans, temp);//printf("%lld\n", temp);}printf("%lld\n", ans);}return 0;}
这里假设m=3, sum1=1*a1+2*a2+3*a3----->>>>下一个答案是sum2=a2*1+a3*2+a3*3,则可以得到关系式sum2=sum1-(a1+a2+a3)+m*a4。因此可以得到一个通式sum(n)=sum(n-1)-(a[n]+.......a[n+m])+m*a[n+m+1].只要先预处理前m个数的和,然后按照以上思路O(n)的复杂度求出所有答案。不断更新答案即可
Problem 2168 防守阵地 I
Accept: 442 Submit: 1549
Time Limit: 3000 mSec Memory Limit : 32768 KB
Problem Description
部队中共有N个士兵,每个士兵有各自的能力指数Xi,在一次演练中,指挥部确定了M个需要防守的地点,按重要程度从低到高排序,依次以数字1到M标注每个地点的重要程度,指挥部将选择M个士兵依次进入指定地点进行防守任务,能力指数为X的士兵防守重要程度为Y的地点将得到X*Y的参考指数。现在士兵们排成一排,请你选择出连续的M个士兵依次参加防守,使得总的参考指数值最大。
Input
输入包含多组数据。
输入第一行有两个整数N,M(1<=N<=1000000,1<=M<=1000),第二行N个整数表示每个士兵对应的能力指数Xi(1<=Xi<=1000)。
对于30%的数据1<=M<=N<=1000。
Output
输出一个整数,为最大的参考指数总和。
Sample Input
5 3
2 1 3 1 4
Sample Output
17
0 0
- FZU 2168
- FZU 2168
- FZU
- FZU
- FZU
- FZU
- FZU
- FZU
- FZU
- FZU
- FZU
- FZU
- FZU
- FZU
- FZU
- FZU
- FZU
- FZU
- java-Collections类中shuffle的用法
- LINUX1——Linux 查找指定名称的进程并显示进程详细信息
- 【HttpClient4.5中文教程】【第一章 :基础】1.1执行请求(三)
- Java 异常处理
- iOS开发见闻-第4期
- FZU 2168
- 从头认识java-6.2 继承(Generalization)(2)
- Java多线程
- 【HttpClient4.5中文教程】【第一章 :基础】1.2 HttpClient接口
- 【Android成长之路】全局大喇叭——广播机制的浅谈(使用本地广播)
- ZOJ 2243 Binary Search Heap Construction笛卡尔树(二叉搜索+堆)
- 推荐使用string直接量来赋值
- android---(volley网络通信框架)
- 记录python数据持久存储的一点问题