此题用贪心求解,

首先将caramel drop类别的糖果按照高度从小到大排序,如果高度相同,按照重量从小到大排序

将fruit drop类别的糖果按照高度从小到大排序,如果高度相同,按照重量从小到大排序

现在有两种可能

第一种可能是第一个获得的糖果是caramel drop,

则先搜索caramel drop类别的,然后找到高度小于x的最大高度的index,则在0~index索引之间的高度都小于x,则搜索0~index之间的mass最大的,这样之后高度变得最大,计数值加1,更新x

在搜索fruit drop类别的,然后找到高度小于x的最大高度的index,则在0~index索引之间的高度都小于x,则搜索0~index之间的mass最大的,这样之后高度变得最大,计数值加1,更新x(跟caramel drop类别搜索的一样)

第二种可能是第一个获得的糖果是fruit drop,其搜索过程是上面的两个过程反过来

#include <iostream>
#include <vector>
#include <algorithm>
#include <string>
#include <cstring> using namespace std; struct Fruit{
int height;
int mass;
Fruit(int height_ = , int mass_ = ):height(height_),mass(mass_){}
bool operator <(const Fruit& a) const {
if(height != a.height) return height < a.height;
else return mass < a.mass;
}
}; int main(){
int n,x;
cin >> n>>x;
vector<Fruit> fruit[];
for(int i = ; i < n; ++ i){
int t,h,m;
cin >> t >> h >> m;
fruit[t].push_back(Fruit(h,m));
} sort(fruit[].begin(),fruit[].end());
sort(fruit[].begin(),fruit[].end()); int ans = ;
for(int type = ; type < ; ++ type ){
vector<vector<bool> > visit();
for(int i = ; i < fruit[].size(); ++ i) visit[].push_back(false);
for(int i = ; i < fruit[].size(); ++ i) visit[].push_back(false);
int res = ,new_x = x;
bool flag = true;
while(flag){
for(int k = ; k < ; ++ k){
int new_type = (type+k)%, index = fruit[new_type].size()-;
          //搜索高度小于new_x的最大高度
for(;index>=; --index){
if(!visit[new_type][index] && fruit[new_type][index].height <= new_x) break;
}
if(index < ) {flag = false;break;}
          //在满足条件的高度中搜索质量最大的
int maxMassIndex = index,maxMass = fruit[new_type][index].mass;
for(int i = index -; i >=; -- i){
if(!visit[new_type][i] && fruit[new_type][i].mass > maxMass){
maxMass = fruit[new_type][i].mass ;
maxMassIndex = i;
}
}
index = maxMassIndex;
visit[new_type][index] = true; //标识该糖果已被访问
new_x +=fruit[new_type][index].mass; //更新x
res ++;
}
}
ans = max(ans,res);
}
cout<<ans<<endl;
}

最新文章

  1. Maven远程仓库的认证
  2. 随笔分类 - [C#6] 新增特性
  3. 编程工具系列之二------使用GDB的源代码查看功能
  4. 【ASP.NET Web API教程】6.1 媒体格式化器
  5. linux eclipse cdt make error 127
  6. 关于call和apply的那点事儿
  7. Hibernate逍遥游记-第12章 映射值类型集合-004映射Map(&lt;map-key&gt;)
  8. 使用FileResult导出txtl数据文件
  9. Android 自学之帧布局 FrameLayout
  10. 一段代码让你秒懂java方法究竟是传值还是传地址
  11. beanutils中jdbc
  12. python2.7 与 go1.2简单性能比较
  13. c语言中,有符号数位移
  14. Python_day1 Learning record
  15. 选择结构的三角关系Switch、Case、Default!!!
  16. git 合并多个commit
  17. 调用 TBrowseForFolder 的正确姿势
  18. github入门教程:第一步
  19. openvpn之EasyRSA配置篇
  20. Python学习---IO的异步[gevent+Grequests模块]

热门文章

  1. Jcapta
  2. 算法系列:geometry
  3. JavaScript高级程序设计 读书笔记
  4. wp8 入门到精通 启动系统分享照片任务
  5. [QCon] Scrum阅读随想
  6. [JavaCore] 取得类的字节码、取得类的装载器
  7. AIX RAC ORA-27504 ORA-27300 ORA-27301 ORA-27302 ORA-27303
  8. 10 个学习iOS开发的最佳网站(转)
  9. for循环嵌套
  10. strcmp函数的使用