题意
略
思路
贪心求解,尽可能去取获得能量大的糖果,然后再从头枚举取合适的糖果,这里从头枚举的话要把 i i i 设为 − 1 -1 −1 ,一开始设为 0 0 0 (憨),然后 i + + i++ i++ 后就从第二个开始枚举了…
代码实现
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <algorithm>
using namespace std;
const int maxn=2010;
struct candy{
int t,h,m;
bool operator<(const candy &s)const {return m>s.m;}
};
candy a[maxn],b[maxn];
int n,x,ans;
int main()
{
scanf("%d%d",&n,&x);
for(int i=0;i<n;i++){
scanf("%d%d%d",&a[i].t,&a[i].h,&a[i].m);
b[i].t=a[i].t;b[i].h=a[i].h;b[i].m=a[i].m;
}
sort(a,a+n);sort(b,b+n);
int maxh=x,tmp=0,flag=0;
ans=0;
for(int i=0;i<n;i++){
if(a[i].h<=maxh&&a[i].t==flag){
flag=1-flag;
ans++;
maxh+=a[i].m;
a[i].t=-1;
i=-1;
}
}
maxh=x,flag=1;
for(int i=0;i<n;i++){
if(b[i].h<=maxh&&b[i].t==flag){
flag=1-flag;
tmp++;
maxh+=b[i].m;
b[i].t=-1;
i=-1;
}
}
printf("%d\n",max(ans,tmp));
return 0;
}