01背包问题的递归法求解
int GetMaxScore(int h, int w[], int s[], int CourseCount)
{
if (CourseCount == 0 )
{
return 0;
}
else {
int Score1 = GetMaxScore(h, w, s, CourseCount - 1);
int Score2 = GetMaxScore(h - w[CourseCount-1], w, s, CourseCount - 1) + s[CourseCount-1];
//注意第n节课的数组下标为n-1!!!
if (h < w[CourseCount - 1])
{
return Score1;
}
else {
return Score1 > Score2 ? Score1 : Score2;
}
}
}
精髓在于理解动态变化过程:
设 为总时间h,考虑前n节课时可获得的最高分,则:
一、若第n节课时时间不够,即 ,则
&n