房间装饰重要性与成本的最大值问题
#include
using namespace std;
#define MAX 20
int v[MAX] = { 0, 1000, 800, 400, 300, 400, 200 }, w[MAX] = { 0, 5, 2, 5, 5, 3, 2 }, a[MAX] = { 0 };
int V=2300, n=6, value = 0, sum = 0, maxValue = 0;
void bfs(int s)
{
if (s > n)
{
if (sum > maxValue) maxValue = sum;
return;
}
int i;
for ( i = s; i <=n; i++)
{
if (((value + v[i]) > V)||a[i]==1) continue;
a[i] = 1;//标记
value = value + v[i];
sum = sum + v[i] * w[i];
break;
}
bfs(s + 1);
value = value - v[i];
sum = sum - v[i] * w[i];
}
int main()
{
bfs(1);
cout << maxValue << endl;
return 0;
}