编辑代码

#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;
}