#include <iostream>
#include <string>
using namespace std;
class Scenicspots {
public:
string name;
int days;
int score;
Scenicspots(string n, int d, int s) : name(n), days(d), score(s) {}
};
void GetMaxValue(Scenicspots scenicspotslist[], int size, int daysum, int pos, int& maxScore, int& maxPos, int score, int days) {
if (days <= daysum && score > maxScore) {
maxPos = pos;
maxScore = score;
}
if (pos == size) return;
GetMaxValue(scenicspotslist, size, daysum, pos + 1, maxScore, maxPos, score, days);
GetMaxValue(scenicspotslist, size, daysum, pos + 1, maxScore, maxPos, score + scenicspotslist[pos].score, days + scenicspotslist[pos].days);
}
int main() {
Scenicspots scenicspotslist[] = {
Scenicspots("故宫", 1, 7),
Scenicspots("颐和园", 2, 8),
Scenicspots("长城", 3, 9),
Scenicspots("天坛", 1, 6)
};
int size = sizeof(scenicspotslist) / sizeof(Scenicspots);
int maxScore = -1;
int maxPos = -1;
GetMaxValue(scenicspotslist, size, 4, 0, maxScore, maxPos, 0, 0);
if (maxPos > 0) {
int score = 0;
cout << "最佳选择如下:" << endl;
for (int bit = 0; bit < size; ++bit) {
if (maxPos & (1 << bit)) {
cout << scenicspotslist[bit].name;
cout << " 需花费" << scenicspotslist[bit].days << "天,";
cout << " 评分为" << scenicspotslist[bit].score << endl;
score += scenicspotslist[bit].score;
}
}
cout << "获得最大价值 " << score << endl;
}
return 0;
}