讨论 / C++过此题
一个中学生 2013-07-13 23:44:00
点我顶贴 收藏 删除
#include<iostream>

#include<cstdio>

#include<cstring>

using namespace std;

int coin[1001][1001],cost[1001],f[1001][1001],step[1001][1001],past[1001],i,j,k,m,n,p,pastmax=0,nowmax;

int main()

{

scanf("%d%d%d",&n,&m,&p);

for(i=1;i<=n;i++)

for(j=1;j<=m;j++)

scanf("%d",&coin[j][i]);

for(i=1;i<=n;i++)scanf("%d",&cost[i]);

memset(f,0,sizeof(f));

memset(step,0xfffff,sizeof(step));

for(i=2;i<=n;i++)past[i]=i-1;

past[1]=n;

nowmax=-0xfffff;

for(j=1;j<=n;j++)

{

step[1][j]=1;

f[1][j]=pastmax-cost[past[j]]+coin[1][past[j]];

if(f[1][j]>nowmax)nowmax=f[1][j];

}

pastmax=nowmax;

for(i=2;i<=m;i++)

{

nowmax=-0xfffff;

for(j=1;j<=n;j++)

{

if(step[i-1][past[j]]<p)

{

if(pastmax-cost[past[j]]>f[i-1][past[j]])

{

step[i][j]=1;

f[i][j]=pastmax-cost[past[j]]+coin[i][past[j]];

}

else

{

step[i][j]=step[i-1][past[j]]+1;

f[i][j]=f[i-1][past[j]]+coin[i][past[j]];

}

}

else

{

step[i][j]=1;

f[i][j]=pastmax-cost[past[j]]+coin[i][past[j]];

}

if(f[i][j]>nowmax)nowmax=f[i][j];

}

pastmax=nowmax;

}

printf("%d\n",nowmax);

return 0;

}

C++AC无障碍!

查看更多回复
提交回复