#include <stdio.h>
#include <limits.h>
#define C 2
int p[11]={0,1,5,8,9,10,17,17,20,24,30};
int r[11],s[11];
int max(int a,int b)
{
return a>=b?a:b;
}
void bottomUpCutRod(int n)
{
r[0]=0;
int q;
for(int i=1;i<=n;i++)
{
q=INT_MIN;
for(int j=1;j<=i;j++)
{
int profit;
if(j<i)
profit=p[j]+r[i-j]-C;
else
profit=p[j]+r[i-j];
if(q<profit)
{
s[i]=j;
q=profit;
}
}
r[i]=q;
}
}
void printS(int n)
{
while(n>0)
{
printf("%d ",s[n]);
n-=s[n];
}
printf("\n");
}
int main()
{
int k=5;
bottomUpCutRod(k);
printf("%d\n",r[k]);
printS(k);
getchar();
}
算法导论 练习题 15.1-3
最新推荐文章于 2020-05-26 09:11:45 发布