前缀和维护的出问题,帮忙调一下
查看原帖
前缀和维护的出问题,帮忙调一下
54567
szzhendong楼主2023/12/28 16:30
#include <bits/stdc++.h>
using namespace std;
#define ll long long 
#define ull unsigned long long 

/*
 	f[i]:[1,i]时间内能收集的最大金币数量
	sum[i][j]:从i号开始,从单位时间1开始走j个单位时间收集的金币数量 	 
*/
int a[1010], b[1010][1010], sum[1010][1010];
int f[1010]; 
int main()
{
	int n, m, p, t;
	scanf("%d%d%d", &n, &m, &p);
	for (int i = 1; i <= n; ++i)
		for (int j = 1; j <= m; ++j)
			scanf("%d", &b[i][j]);
	for (int i = 1; i <= n; ++i) scanf("%d", &a[i]);
	// sum[][]
	for (int i = 1; i <= n; ++i)
	{
		t = i - 1;
		for (int j = 1; j <= m; ++j)
		{
			++t;
			if (t == n + 1) t = 1;
			sum[i][j] = sum[i][j-1] + b[t][j];
		}
	}
	//   
	memset(f, 0xcf, sizeof(f));
	f[0] = 0;
	for (int i = 1; i <= m; ++i)
	{
		for (int j = 1; j <= n; ++j) // 枚举最后一个机器人从j购买  
			for (int k = 1; k <= p && k <= i; ++k)
			{
				f[i] = max(f[i], f[i-k] + sum[j][i] - sum[j][i-k] - a[j]);
			}
	}
	// ans
	printf("%d\n", f[m]);
	return 0;
}
/*

*/
2023/12/28 16:30
加载中...