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个士兵依次进入指定地点进行防守任务.获得 ...
随机推荐
- 设置打印机共享,适用Win7、Vista、xp,不用密码
此处以HP M1213nf为例,其他型号大同小异. 1.设置打印机共享: "开始"→ "控制面板"→ "设备和打印机" 2.找到&quo ...
- AngularJs与Java Web服务器交互
AngularJs是Google工程师研发的产品,它的强大之处不是几句话就能描述的,只有真正使用过的人才能体会到,笔者准备在这篇文章中,以一个简单的登录校验的例子说明如何使用AngularJs和Web ...
- jdbc 实现分页
jdbc 实现分页,的实现 原理这个就不介绍了.. 总之是用jdbc 的游标移动 package com.sp.person.sql.util; import java.sql.Connection; ...
- oracle数据库跨库查询
create public database link mylink connect to orclname identified by orclpasswd using 'ORCL'; drop p ...
- 判断点击第几个按钮JS代码的三种方法
方法一:使用下标实现<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> < ...
- ThinkPHP---插件highcharts
[一]概论 (1)介绍 基于jquery开发的国外图标插件,统计图,折线图,饼状图等常常用到. 国内也有一款类似插件echarts,由百度开发. (2)官网:www.highcharts.com ...
- 打造个人的vimIDE
环境说明 系统版本:centos7.Ubuntu16 vim版本:7.4 安装git工具 整体说明:本文的vim配置是针对Linux的单个系统用户,python的自动补全使用的是 jedi-vim 插 ...
- 【转载】appium自动化环境搭建
1.java开发环境JDK 2.android SDK(platform/platform tools/tools/build tools) 3.python下载安装(pip) 4.appium下载安 ...
- spring cloud (一):大话 Spring Cloud
转自:http://www.ityouknow.com/springcloud/2017/05/01/simple-springcloud.html 研究了一段时间Spring Boot了准备向Spr ...
- Listview异步加载图片之优化篇
在APP应用中,listview的异步加载图片方式能够带来很好的用户体验,同时也是考量程序性能的一个重要指标.关于listview的异步加载,网上其实很多示例了,中心思想都差不多,不过很多版本或是有b ...