站外题90pts求调,悬赏关注(CSDN亦可)
  • 板块学术版
  • 楼主fqEason
  • 当前回复6
  • 已保存回复6
  • 发布时间2022/9/25 19:13
  • 上次更新2023/10/27 09:58:10
查看原帖
站外题90pts求调,悬赏关注(CSDN亦可)
723171
fqEason楼主2022/9/25 19:13

题目描述 寒冬末日到来,未来科技有限公司在零下几十度的环境下艰难求生。 为了未来科技有限公司能够继续生存下去,员工们需要长时间努力劳作。公司在一条直线上设置了N个工作点供员工劳作。然而,习惯了末日前生活的员工常常会在劳作时偷懒,抑或寻求更短的劳作时间。因此,董事长王老菊安排了M个工头,通过工头喊一嗓子的方式激励或催促员工工作。但工头的能力毕竟是有限的,一个工头只能管理连续的K个工作点。 现在给出每个工作点的员工个数,董事长想知道,这些工头最多能够管理到多少员工?

如: 有10个工作点,3个工头,每个工头能管理连续2个工作点,而各工作点的员工数量是: 10 5 34 4 26 12 75 15 8 20 则最多能管理到167名员工。

输入格式 输入文件第一行有三个数N,M,K。如题所述。 接下来一行N个数,依次表示每个工作点里的员工个数。

输出格式 输出文件共一行一个数,表示工头最多能管理的员工人数。

样例 【输入样例】 7 4 1 2 43 32 4 64 1 10 【输出样例】 149 数据范围与提示 【数据规模】 30% 1 <= N, M, K <= 100 100% 1 <= N, M, K <= 1000 总人数在longint范围内。

#include<bits/stdc++.h>
using namespace std;
long long n,m,k,x;
long long s[1011];
long long f[1011][1011];
int main() {
	freopen("manage.in","r",stdin);
	freopen("manage.out","w",stdout);
	cin >> n >> m >> k;
	for(int i=1;i<=n;i++) {
		cin >> x;
		s[i]=s[i-1]+x;
	}
	for (int i=1;i<=n;i++) {
		for (int j=1;j<=m;j++) {
			f[i][j]=max(f[i-1][j],i>=k?f[i-k][j-1]+s[i]-s[i-k]:f[i-1][j]);
		}
	}
	cout << f[n][m];
	return 0;
}

2022/9/25 19:13
加载中...