FZU 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
Sample Output
思路:
这题肯定是不能暴力求解的,听说能够用什么线段树,我没试过。以下说说代码最少最快的公式推导:
例:
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]
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(公式推导)(经典)(中等)的更多相关文章
- FZU 2168 防守阵地 I
Problem Description 部队中共有N个士兵,每个士兵有各自的能力指数Xi,在一次演练中,指挥部确定了M个需要防守的地点,按重要程度从低到高排序,依次以数字1到M标注每个地点的重要程度, ...
- FZU 2168 防守阵地 I(前n项和的前n项和)
这是一道很容易超时的题,我超了n次了,后来队友提示我才想到,bigsum ! ! ! !就是前n项和的前n项和 #include<iostream> #include<cstdio& ...
- 福州大学 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 ...
- FZU_Problem 2168 防守阵地 I
Problem 2168 防守阵地 I Accept: 128 Submit: 392 Time Limit: 3000 mSec Memory Limit : 32768 KB Problem De ...
- fzu 2171 防守阵地 II
Problem 2171 防守阵地 II Accept: 31 Submit: 112Time Limit: 3000 mSec Memory Limit : 32768 KB Prob ...
- 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 ...
- FZU2168——防守阵地 I——————【找规律或前缀和】
防守阵地 I Time Limit:3000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u Submit Statu ...
- FZU Problem 2171 防守阵地 II (线段树区间更新模板题)
http://acm.fzu.edu.cn/problem.php?pid=2171 成段增减,区间求和.add累加更新的次数. #include <iostream> #include ...
- FZU2171:防守阵地 II(线段树)
Problem Description 部队中总共同拥有N个士兵,每一个士兵有各自的能力指数Xi.在一次演练中,指挥部确定了M个须要防守的地点,指挥部将选择M个士兵依次进入指定地点进行防守任务.获得 ...
随机推荐
- Spartan6系列之GTP Transceiver的介绍与使用
1. 什么是GTP transceiver? GTP transceiver是FPGA里一种线速度达500Mb/sà6.6Gb/s的收发器,利用FPGA内部可编程资源可对其进行灵活地配置, ...
- 安装好Pycharm后如何配置Python解释器简易教程
呃呃,遇到坑了...... 安装完Python,没有去配置好Python解释器,直接打开Python项目包,去运行程序,程序输出结果只是显示 Process finished with exit co ...
- 12Microsoft SQL Server 索引
Microsoft SQL Server 索引 8.1创建索引 CREATE INDEX idx_name ON table_name(列名) --创建非聚集索引 use student go cre ...
- BeanFactory的生命周期
Bean自身的方法:调用Bean构造函数实例化Bean.调用setter设置Bean的属性值及通过<beam=n>的init-method和destory-method所制定的方法. Be ...
- ruby学习之路(一)
学习ruby最好的方法就是下载源码包,里面带有sample和test,是入门学习的最好实例. 我下载的是2.1.0版本,首先./configure,然后make,sudo make install.从 ...
- TWaver MONO模板库新鲜出炉 精彩纷呈
MONO Design在线3D建模平台网站, www.mono-design.cn,开发组的成员们已经开始紧锣密鼓的对这个平台进行内测.在之前的文章里,我们提到用户可以获得多种多样的TWaver官方模 ...
- [Python数据结构] 使用List实现Stack
[Python数据结构] 使用List实现Stack 1. Stack 堆栈(Stack)又称为栈或堆叠,是计算机科学中一种特殊的串列形式的抽象数据类型(ADT),其特殊之处在于只能允许在阵列的一端进 ...
- linux-vmstat-显示虚拟内存状态
推荐:更多linux 性能监测与优化 关注:linux命令大全 vmstat命令的含义为显示虚拟内存状态(“Viryual Memor Statics”),但是它可以报告关于进程.内存.I/O等系统整 ...
- 在vue项目中快速使用element UI
推荐使用npm安装 1.安装:npm install element-ui -S 2.整体引入: 在你项目的main.js中写入: import ElementUI from 'element-ui' ...
- 以位为单位存储标志-共用体-union
一.程序的结构如下: typedef union _KEYST { struct { uint8 Key1_Flag :1;//表示第0 ...