国产探花免费观看_亚洲丰满少妇自慰呻吟_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]

以此類推,搞定


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 朔州市| 体育| 准格尔旗| 宿松县| 盐城市| 垣曲县| 句容市| 二连浩特市| 太保市| 平果县| 西城区| 新河县| 平和县| 贵港市| 渑池县| 安康市| 黑水县| 界首市| 邯郸县| 虎林市| 静乐县| 彰武县| 梓潼县| 都安| 霍林郭勒市| 丰都县| 竹山县| 罗江县| 德化县| 衢州市| 赫章县| 百色市| 彭山县| 延长县| 隆化县| 泸水县| 阿拉善盟| 马尔康县| 柳林县| 湖北省| 金昌市|