自己用递归写了一个代码,也加记忆化的搜索了,但是结果还是超时,不知道什么原因,从网上搜了一个代码,大概知道自己什么原因了,自己的思维还是不够深,抽象能力还没达到,没有对条件进一步的抽象,结果导致处理的数据怎多,结果超时!!!
#include <stdio.h>
#include <string.h>
int dp(int i, int j);
int c[55];
int d[55][55];
int l;
int n;
int main()
{
scanf("%d", &l);
while(l)
{
int i;
scanf("%d", &n);
for(i = 1; i <= n; i++)
scanf("%d", &c[i]);
c[n+1] = l;
memset(d, 0, sizeof(d));
printf("The minimum cutting is %d.\n", dp(0, n+1));
scanf("%d", &l);
}
}
int dp(int i, int j)
{
if(d[i][j] > 0)
return d[i][j];
int k;
if(j - i == 1)
return 0;
d[i][j] = 0xffffff;
for(k = i + 1; k < j; k++)
{
int temp;
temp = dp(i, k) + dp(k, j) + (c[j]-c[i]);
if(d[i][j] > temp)
d[i][j] = temp;
}
return d[i][j];
}
以上代码参考: http://blog.csdn.net/moyan_min/article/details/8765061