防守阵地 I FZU - 2168
来源:互联网 发布:下一代网络结构和特点 编辑:程序博客网 时间:2024/05/29 18:04
部队中共有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
#include<stdio.h>#include<string.h>#include<math.h>#include<algorithm>using namespace std;int a[1000005];int x[1000005];int sum[1000005];int main(){ int n,m; while(~scanf("%d%d",&n,&m)) { for(int i=1; i<=n; i++) scanf("%d",&a[i]); memset(x,0,sizeof(x)); memset(sum,0,sizeof(sum)); for(int i=n; i>=1; i--) { x[n-i+1]=x[n-i]+a[i]; } for(int i=1; i<=n; i++) { sum[i]=sum[i-1]+x[i]; } int ans=0; for(int i=n; i>=m; i--) { ans=max(ans,sum[i]-sum[i-m]-m*x[i-m]); } printf("%d\n",ans); }}
分析:
定义三个数组
a[i] x[i] sum[i]
以样本为例:
for(int i=n; i>=1; i–)
{
x[n-i+1]=x[n-i]+a[i];
}
x[1]= a[5];
x[2]= a[4]+a[5];
x[3]= a[3]+a[4]+a[5];
x[4]= a[2]+a[3]+a[4]+a[5];
x[5]= a[1]+a[2]+a[3]+a[4]+a[5];
for(int i=1; i<=n; i++)
{
sum[i]=sum[i-1]+x[i];
}
sum[1]=sum[0]+x[1];
sum[2]=x[1]+x[2];
sum[3]=x[1]+x[2]+x[3];
sum[4]=x[1]+x[2]+x[3]+x[4];
sum[5]=x[1]+x[2]+x[3]+x[4]+x[5];
ans[1]=a[1]+2*a[2]+3*a[3]==x[3]+x[4]+x[5]-3*(a[4]+a[5])==sum[5]-sum[2]-3*x[2]
以此类推,搞定
- FZU 2168 防守阵地 I
- FZU 2168 防守阵地 I
- 防守阵地 I FZU - 2168
- FZU Problem 2168 防守阵地 I
- FZU Problem 2168 防守阵地 I
- FZU 2168 防守阵地 I(公式推导)(经典)(中等)
- FZU 2168 防守阵地I (模拟 简单规律)
- FZU_Problem 2168 防守阵地 I
- fzu 防守阵地 1
- 福州大学 Problem 2168 防守阵地 I
- 2168 防守阵地 I(简单数学题)
- FZU2169:防守阵地 I
- 防守阵地 I
- FZU2168 防守阵地 I
- FZU2168 防守阵地 I
- FZU_2168_防守阵地I
- FZU2168:防守阵地 I
- 防守阵地 I
- 安卓开发-高级Admin激活和使用
- Codeforces Round #397 by Kaspersky Lab and Barcelona Bootcamp (Div. 1 + Div. 2 combined)
- 反射(基础知识)
- linux如何使用gcc生成静态库和动态库
- 解决无法使用SecureCRT或Xshell登录vmware ubuntu14.04问题
- 防守阵地 I FZU - 2168
- api接口相关
- Java网络编程要点
- Java流程控制语句——if-else语句
- 官网https://github.com/reactjs/react-router-tutorial学习
- JSP内置对象(1)
- C语言:P13练习——如何将多个空格输入一个
- Javascript JQuery获取当前元素的兄弟元素/上一个/下一个元素(转)
- Eclipse 自动补全 import