【贪心】选武器
作者:互联网
http://oj.hzjingma.com/p/7817?view=classic
贪心的能力还是弱啊。
代码块:
const int N=1e5+10;
ll a[N],b[N],k;
int n;
int main(){
cin>>n>>k;
for(int i=1;i<=n;i++){
read(a[i]),read(b[i]);
}
sort(a+1,a+n+1,greater<int>());
sort(b+1,b+n+1,greater<int>());
ll va=0,ans=1e18;
if(b[1]>=k){
puts("1");return 0;
}
for(int i=1;i<=n;i++){
va+=b[i];
if(va>=k){
ans=min(ans,1ll*i);break;
}else ans=min(ans,i+(ll)ceil((k-va)/1.0/a[1]));
}
cout<<ans<<endl;
return 0;
}
如何贪?
选大的怎么选?
之前我一直纠结着同一个材料有两种不同的属性
这是关联着的,又怎么排,按照哪个来从大到小排起到决定作用么?
看了题解才发现
把数组a,数组b都从大到小排就好了。
遍历只能一次性使用的b数组,从大到小加起来,然后再每次都计算剩下的值可以被a[1]除几次,向上取整,再加上当前的i,更新ans。
虽然看起来都是之后再对a[1]进行操作,但是只要当做是之前操作的就好了。
标签:大到,int,ll,数组,ans,武器,小排,贪心 来源: https://blog.csdn.net/weixin_44745441/article/details/104502721