讨论 / AC100 递归
officeyutong 2017-04-16 07:42:51
点我顶贴 收藏 删除
递归实现动态规划:

#include <iostream>

using namespace std;

int * money;

int * value;

inline int max(int a, int b) {

if (a > b) return a;

else return b;

}

int maxValue(int endIndex, int maxMoney) {

if (endIndex == 1)

{

if (money[endIndex] <= maxMoney) return value[endIndex];

else return 0;

}

int result1 = maxValue(endIndex - 1, maxMoney);

int result2;

if(maxMoney - money[endIndex]>0)

result2=maxValue(endIndex - 1, maxMoney - money[endIndex]) + value[endIndex];

else result2 = 0;

return max(result1, result2);

}

int main() {

int maxMoney, itemCount;

cin >> maxMoney >> itemCount;

money = new int[itemCount + 1];

value = new int[itemCount + 1];

for (int i = 1; i <= itemCount; i++) {

cin >> money[i];

int weight;

cin >> weight;

value[i] = weight*money[i];

}

cout << maxValue(itemCount, maxMoney);

delete[] money;

delete[] value;

}

查看更多回复
提交回复