厦门理工学院OJ 1533.贪吃的学姐 (dfs)

Description

美丽的静雯学姐有N根棒棒糖,每根棒棒糖有一个价格price(元)和保质期date(还能存放的天数),为了保护牙齿,静雯学姐每天只能吃掉一根棒棒糖。学姐总是尽可能的吃掉最贵的棒棒糖,但是她从不吃过期的棒棒糖!为了避免太多金钱亏损,请问,学姐最多能够吃掉多少价格的棒棒糖。

Input

第一行为一个整数N,表示棒棒糖的总数(1<=N<=100)
接下来是N行,表示N根棒棒糖的相关数据,每行两个整数price和data(1<=price,date<=100),price是棒棒糖的价格,date是该棒棒糖还能存放的天数。N行的price值已经按从高到低排好序。

Output

输出一个整数,表示最多能够吃掉的棒棒糖价格之和

Sample Input

3
20 2
10 1
5 2

Sample Output

30

题解

由于数据量很小,直接暴力搜索即可。

代码

#include
#include
using namespace std;

struct Sweet{
	int price;
	int date;
};

int Max=0;
int sum=0;
 
vector<bool> book(105);

void dfs(vector<Sweet>& sweet, int date,int n){
	if(!date){
		for(int i=0;i<n;i++){
			book[i]=0;
		}
	}
	for(int i=0;i<n;i++){
		if(sweet[i].date>date&&!book[i]){
			sum+=sweet[i].price;
			book[i]=1;
			dfs(sweet,date+1,n);
			book[i]=0;
			sum-=sweet[i].price;
		}
	}
	Max=max(Max,sum);
}

int main()
{
	int n;
	cin>>n;
	vector<Sweet> sweet;
	Sweet temp;
	int a,b;
	for(int i=0;i<n;i++){
		cin>>temp.price>>temp.date;
		sweet.push_back(temp);
	}
	dfs(sweet,0,sweet.size());
	cout<<Max<<endl;
    return 0;
}

你可能感兴趣的:(dfs)