zoukankan      html  css  js  c++  java
  • 福州大学 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个数求和。

     Problem 2168 防守阵地 I

    Accept: 14    Submit: 20 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
     1 #include<stdio.h>
     2 int dp[1000005],x[1000005],ans[1000005];
     3  int main()
     4 {
     5     int n,m,k,max;
     6       int  i,j;
     7     while(~scanf("%d%d",&n,&m))
     8     {
     9              k=0;
    10              ans[0]=0;dp[0]=0;
    11           for(i=1;i<=n;i++)
    12           {
    13                scanf("%d",&x[i]);
    14                if(i<=m)
    15                  {
    16                     ans[k]+=x[i];
    17                     dp[k]+=i*x[i];
    18                     max=dp[k];
    19                  }
    20                 else
    21                   {
    22                       k++;
    23                       ans[k]=ans[k-1]-x[i-m]+x[i];
    24                       dp[k]=dp[k-1]-ans[k-1]+x[i]*m;
    25                      if(max<dp[k])
    26                          max=dp[k];
    27                   }
    28           }
    29 
    30            printf("%d
    ",max);
    31     }
    32     return 0;
    33 }
     
  • 相关阅读:
    php防止用户输入进行跨站攻击的方式
    php中相关函数
    php运算符
    php中error_reporting
    php环境的安装
    LAMP环境介绍
    js的StringBuffer类
    一个带关闭按钮的Div窗口,很漂亮
    js  计算是今天多少周
    java 递归
  • 原文地址:https://www.cnblogs.com/cancangood/p/3695171.html
Copyright © 2011-2022 走看看