#include <stdio.h>
#include <stdlib.h>
#include <limits.h>
#define M 10 // max line width
#define N 10 // words amount
int* dp(int w[N+1])
{
int *s=(int*)malloc((N+1)*sizeof(int*));
s[0]=0;
int l,i,j,k;
for(i=1;i<N+1;i++)
{
int minBlank=INT_MAX;
for(j=1;j<=i;j++)
{
int len=0;
for(int k=j;k<=i;k++)
{
len+=w[k];
}
int bl=M-i+j-len;
if(bl<0)
bl=INT_MAX;
if(bl<minBlank)
{
minBlank=bl;
s[i]=s[j-1]+minBlank;
}
}
}
return s;
}
void getResult(int *s,int w[N+1])
{
printf("最少额外空格:%d\n",s[N-1]);
for(int i=1;i<N+1;i++)
{
if(i-1>0 && s[i]>s[i-1])
{
printf("\n");
printf("%d ",w[i]);
}
else
{
printf("%d ",w[i]);
}
}
}
void printS(int *s)
{
int i;
for(i=1;i<N+1;i++)
{
printf("%2d ",s[i]);
}
printf("\n");
}
void main()
{
int w[N+1]={0,2,7,5,3,2,6,1,3,4,2};
int *s=dp(w);
//printS(s);
getResult(s,w);
getchar();
}
算法导论 思考题 15-4(整齐打印)
最新推荐文章于 2023-08-02 11:31:03 发布