点个赞
2025-09-01 22:00:20
发布于:福建
0阅读
0回复
0点赞
点个赞
#include<bits/stdc++.h>
using namespace std;
const int maxn=2510;
int n,m,p;
long long coin[maxn][maxn],cost[maxn],f[maxn][maxn],ans;
void init()
{
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m+1;j++)
{
if(j==1)f[i][j]=0;
else f[i][j]=INT_MIN;
}
}
}
int main()
{
cin>>n>>m>>p;
for(int i=1;i<=n;i++)
{
	for(int j=1;j<=m;j++)
	cin>>coin[i][j];
}
for(int i=1;i<=n;i++) cin>>cost[i];
init();
for(int j=1;j<=m;j++)
{
	long long maxf=INT_MIN;
	for(int i=1;i<=n;i++) maxf=max(maxf,f[i][j]);
	for(int i=1;i<=n;i++)
	{
		f[i][j]=maxf;
		long long tmp=f[i][j]-cost[i];
		int ii=i,jj=j;
		for(int k=0;k<p;k++)
		{
			tmp+=coin[ii][jj];
			ii++;
			jj++;
			if(ii>n) ii=1;
			if(jj>m+1) break;
			f[ii][jj]=max(f[ii][jj],tmp);
		}
	}
}
for(int i=1;i<=n;i++)
ans=max(ans,f[i][m+1]);
cout<<ans<<endl;
return 0;
}
这里空空如也







有帮助,赞一个