#include <iostream>
#include <math.h>
#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 count, int daysum);
int main() {
Scenicspots scenicspotslist[4] = {
Scenicspots("故宫", 1, 7),
Scenicspots("颐和园", 2, 8),
Scenicspots("长城", 3, 9),
Scenicspots("天坛", 1, 6),
};
int size = sizeof(scenicspotslist) / sizeof(Scenicspots);
GetMaxValue(scenicspotslist, size, 4);
}
void GetMaxValue(Scenicspots scenicspotslist[], int count, int daysum)
{
int Maxscore = -1;
int MaxPos = -1;
for (int i = 0; i < exp2(count); i++)
{
int score = 0;
int days = 0;
int bit = 0;
int pos = i;
for (; pos > 0; pos = pos >> 1)
{
if ((pos & 1) == 1)
{
days = days + scenicspotslist[bit].days;
score = score + scenicspotslist[bit].score;
}
bit++;
}
if (days <= daysum && Maxscore < score)
{
MaxPos = i;
Maxscore = score;
}
}
if (MaxPos > 0) {
int score = 0;
int bit = 0;
cout << "这次选择如下: " << endl;
for (; MaxPos > 0; MaxPos = MaxPos >> 1)
{
if ((MaxPos & 1) == 1)
{
cout << scenicspotslist[bit].name;
cout <<" 需花费" << scenicspotslist[bit].days << "天,";
cout <<" 评分为" << scenicspotslist[bit].score << endl;
score = score + scenicspotslist[bit].score;
}
bit++;
}
cout << "获得最大价值 " << score<<endl;
}
}