P1478 陶陶摘苹果(升级版)
题目描述
键盘输入一个高精度的正整数 N(不超过 250位),去掉其中任意 k个数字后剩下的数字按原左右次序将组成一个新的非负整数。编程对给定的 N 和 k,寻找一种方案使得剩下的数字组成的新数最小。
输入格式
输入两行正整数。
第一行输入一个高精度的正整数 nn。
第二行输入一个正整数 kk,表示需要删除的数字个数。
输出格式
输出一个整数,最后剩下的最小数。
#include <bits/stdc++.h>
using namespace std;
struct apple{
int x;//高度
int y;//力气
apple(int xx, int yy) {
x = xx, y = yy;
}
};
int compare(apple a,apple b){
if(a.y<b.y){
return 1;
}
else{
return 0;
}
}
int main(){
int n,s;//苹果数和力气数
cin>>n>>s;
int a,b;
cin>>a>>b;
int c=a+b;//最高的高度
vector<apple> app;
int xx,yy;
for(int i=0;i<n;i++){
cin>>xx>>yy;
if(xx<=c){
app.push_back(apple(xx,yy));
}
}
sort(app.begin(),app.end(),compare);
int max=0;
int index=0;
for(int i=0;i<app.size();i++){
if(s>=app[i].y){
max++;
s-=app[i].y;
}
else{
break;
}
}
cout<<max;
return 0;
}