这个问题就很有意思了,他的状态不再是用单变量表示的,要仔细考虑状态的递归。
/******************************************************
**文件名:百炼-2817
**Copyright (c) 2015-2025 OrdinaryCrazy
**创建人:OrdinaryCrazy
**日期:20170806
**描述:百炼2817参考答案
**版本:1.0
******************************************************/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int n,sticks[64],used[64];
int compare(const void* a,const void* b)
{
return *(int*)b - *(int*)a;
}
/*******************************************************
首先,对于最小的木棒长度
1,他能整除总长度
2,他比最长的小木棒长
所以我们需要枚举从最长的小木棒长到总长度的所有长度,直到找到一个可行的长度
那么对于一个长度,我们判断它是否可行的方法就是逆推,假如就是这个长度,看能不能分出这么多的小木棍
递归状态f(k,left,len,n)
k-还需要切多少个小木棒
left-现在在切的那根还剩多少
len-木棒长度
n-还有多