Problem 2168 防守阵地 I

Accept: 377    Submit: 1280

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 32 1 3 1 4

 Sample Output

17

思路:

这题肯定是不能暴力求解的,听说能够用什么线段树,我没试过。以下说说代码最少最快的公式推导:

例:

5 3 

2 1 3 1 4

5个数。如果用a,b,c,d,e表示这5个数。有两个数组,sum[]。s[](sum[i]表示前i 个数的和,s[i]表示前i 个sum[]的和)。

如今求1*a+2*b+3*c+4*d+5*e的和:

=a+b+c+d+e     sum[5]

+b+c+d+e         sum[5]-sum[1]

+c+d+e             sum[5]-sum[2]

+d+e                 sum[5]-sum[3]

+e                     sum[5]-sum[4]

即:

1*a+2*b+3*c+4*d+5*e=5*sum[5]-(sum[1]+sum[2]+sum[3]+sum[4])。

如今题目求连续三个数*1*2*3的最大和。接着看:

当i=3:

3*sum[3]=3*(a+b+c)

1*a+2*b+3*c=3*sum[3]-(2*a+b)=3*sum[3]-(a+b+a)=3*sum[3]-(sum[2]+sum[1])=3*sum[3]-(s[2]);

i=4:

3*sum[4]=3(a+b+c+d)

b+2*c+3*d=3*sum[4]-(3*a+2*b+c)=3*sum[4]-(sum[1]+sum[2]+sum[3])=3*sum[4]-(s[3])

这时候假设觉得公式就是:

m*sum[i]-s[i-1]
那就错了。

你看,当i=5时:
c+2d+3e=3*sum[5]-(3*a+3*b+2*c+d)=3*sum[5]-(sum[4]+sum[3]+sum[2]+sum[1]-sum[1]);
这明显和上面推导的公式不符。

这里我就不接着推了,公式是:
m*sum[i]-(s[i-1]-s[i-1-m])

代码:
#include <cstdio>
#include <cstring>
#include<iostream>
#include <algorithm>
using namespace std;
const int L = 1000010;
int sum[L],s[L]; int main()
{
int n,m,i,j,k,num;
while(~scanf("%d%d",&n,&m))
{
sum[0]=s[0]=0;
for(i=1;i<=n;i++)
{
scanf("%d",&num);
sum[i]=sum[i-1]+num;
s[i]=s[i-1]+sum[i];
}
if(n<=m)
{
printf("%d\n",sum[n]);
continue;
}
int cnt,maxn=0;
for(int i=m;i<=n;i++)
{
cnt=m*sum[i]-(s[i-1]-s[i-1-m]);
maxn=max(maxn,cnt);
}
printf("%d\n",maxn);
}
return 0;
}



FZU 2168 防守阵地 I(公式推导)(经典)(中等)的更多相关文章

  1. FZU 2168 防守阵地 I

    Problem Description 部队中共有N个士兵,每个士兵有各自的能力指数Xi,在一次演练中,指挥部确定了M个需要防守的地点,按重要程度从低到高排序,依次以数字1到M标注每个地点的重要程度, ...

  2. FZU 2168 防守阵地 I(前n项和的前n项和)

    这是一道很容易超时的题,我超了n次了,后来队友提示我才想到,bigsum ! ! ! !就是前n项和的前n项和 #include<iostream> #include<cstdio& ...

  3. 福州大学 Problem 2168 防守阵地 I

    http://acm.fzu.edu.cn/problem.php?pid=2168 最重要的是 dp[k]=dp[k-1]-ans[k-1]+x[i]*m; ans[k-1]是m个数求和.  Pro ...

  4. FZU_Problem 2168 防守阵地 I

    Problem 2168 防守阵地 I Accept: 128 Submit: 392 Time Limit: 3000 mSec Memory Limit : 32768 KB Problem De ...

  5. fzu 2171 防守阵地 II

    Problem 2171 防守阵地 II Accept: 31    Submit: 112Time Limit: 3000 mSec    Memory Limit : 32768 KB  Prob ...

  6. FZU Problem 2168 防守阵地 I

    http://acm.fzu.edu.cn/problem.php?pid=2168 题目大意: 给定n个数和m,要求从n个数中选择连续的m个,使得a[i]*1+a[i+1]*2+--a[i+m]*m ...

  7. FZU2168——防守阵地 I——————【找规律或前缀和】

    防守阵地 I Time Limit:3000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u Submit Statu ...

  8. FZU Problem 2171 防守阵地 II (线段树区间更新模板题)

    http://acm.fzu.edu.cn/problem.php?pid=2171 成段增减,区间求和.add累加更新的次数. #include <iostream> #include ...

  9. FZU2171:防守阵地 II(线段树)

     Problem Description 部队中总共同拥有N个士兵,每一个士兵有各自的能力指数Xi.在一次演练中,指挥部确定了M个须要防守的地点,指挥部将选择M个士兵依次进入指定地点进行防守任务.获得 ...

随机推荐

  1. linux 常用shell命令之wc

    wc:查看文件统计信息 用法:$ wc filename 1. $ wc fileName $ wc fileName X Y Z /Desktop/hello X:表示行数 Y:表示单词数 Z:表示 ...

  2. [ TJOI 2012 ] 防御

    \(\\\) Description 有 \(n\) 人,第 \(i\) 个人有一个护甲值 \(a_i\). 有 \(m\) 次操作,分为以下两种: \(A\ l\ r\ x\) 对编号在 \([l, ...

  3. java继承问题

    代码: 父类: public class Father { public Father() { System.out.println("基类构造函数{"); show(); new ...

  4. 使用vs2010打开vs2015的项目

    本来在单位项目一直使用vs2010写,五一放假拿回家 ,用vs2015捣鼓了一下 当然向下兼容打开毫无问题,结果回来悲催了,用vs2010打不开了 ,打不开. 记得以前有个转换向导,可是这次没看见,一 ...

  5. LR性能分析随笔(一)

    一.关键词 吞吐量:对于吞吐量,单位时间内吞吐量越大,说明服务器的处理能力越好:而请求数仅表示客户端向服务器发出的请求数,与吞吐量一般成正比关系. HTTP:HTTP404表示文件或目录没有找到.有些 ...

  6. 观察者模式在Foundation框架通知中的应用

    GitHub传送门 1.何为观察者模式? 观察者设计模式定义了对象间的一种一对多的依赖关系,以便一个对象的状态发生变化时,所有依赖于它的对象都得到通知并自动刷新. 举个简单的例子:你和你的舍友都订阅了 ...

  7. js统计图表插件 Echarts

    Echarts 用于制作数据统计图表,一个纯 Javascript 的图表库,快捷简便的生成统计图表. 官网:https://www.echartsjs.com/ 效果 html <!DOCTY ...

  8. <MyBatis>入门八 工作原理

    1.获取sqlSessionFactory对象 首先拿到全局配置文件的流对象 创建SqlSessionFactoryBuilder对象,并调用build方法,把流传进去 build方法 创建一个XML ...

  9. PHP 锁机制

    应用环境 解决高并发,库存为负数的情况 阻塞模式 如果其他进程已经加锁文件,当前进程会一直等其他进程解锁文件后继续执行 flock($fp, LOCK_EX) // 文件锁 非阻塞模式 如果其他进程已 ...

  10. BZOJ 5028 小Z的加油店

    [题解] 本题要求求出区间内的各个元素通过加减之后能够得出的最小的数,那么根据裴蜀定理可知答案就是区间内各个元素的最大公约数. 那么本题题意化简成了维护一个序列,支持区间加上某个数以及查询区间元素的最 ...