花束布置问题 C程序 动态规划

来源:百度知道 编辑:UC知道 时间:2024/05/27 12:54:04

#include<stdio.h>
#include<string.h>
int i,j,k,m,n,p,s,r,t;
int f[110][110],a[110][110];
int main()
{
scanf("%d%d\n",&n,&m);
for (i=1;i<=n;i++)
{
for (int j=1;j<=m;j++)
scanf("%d",&a[i][j]);
scanf("\n");
}
memset(f,0,sizeof(f));
for (i=1;i<=n+1;i++) f[i][m+1]=-10000;
for (i=m;i>0;i--)
if (f[n][i+1]>a[n][i]) f[n][i]=f[n][i+1];
else f[n][i]=a[n][i];
for (i=n-1;i>0;i--)
for (j=m;j>0;j--)
{
f[i][j]=f[i][j+1];
if (f[i][j]<f[i+1][j+1]+a[i][j]) f[i][j]=f[i+1][j+1]+a[i][j];
}
printf("%d\n",f[1][1]);
p=1;
for (i=1;i<=n;i++)
{
j=p;
while (f[i][j]==f[i][p]) j++;
printf("%d "