国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

防守陣地 I FZU - 2168

2019-11-08 03:06:17
字體:
來源:轉載
供稿:網友

部隊中共有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]); } 分析: 定義三個數組 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]

以此類推,搞定


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 苍山县| 丘北县| 武强县| 揭东县| 临夏县| 福海县| 邵阳市| 绥中县| 新宾| 天镇县| 娱乐| 策勒县| 敦化市| 沙坪坝区| 南皮县| 治多县| 广元市| 阳信县| 石门县| 全州县| 图木舒克市| 襄城县| 错那县| 中西区| 徐闻县| 上饶县| 文安县| 新蔡县| 永吉县| 大理市| 渝北区| 武隆县| 丘北县| 马尔康县| 余庆县| 平乐县| 偏关县| 陇川县| 卓尼县| 大化| 新宾|