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<iostream>
#include<vector>
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;
}