点个赞
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;
}
这里空空如也
有帮助,赞一个