作者:zealyw | 来源:互联网 | 2023-06-07 14:23
#include
#include
using namespace std;
struct node{
int v,b;
}nd[25];
int cmp(node nd1,node nd2){
if(nd1.v>nd2.v)return 1;
return 0;
}
int main(){
int i,j,n,c,sum,tmp;
bool flag;
scanf("%d%d",&n,&c);
for(int i=0;i scanf("%d%d",&nd[i].v,&nd[i].b);
}
sort(nd,nd+n,cmp);
sum = 0;
for(i=0;i if(nd[i].v>=c){
sum += nd[i].b;
nd[i].b = 0;
}
else{
break;
}
}
if(i==n){
printf("%d\n",sum);
}
else{
while(true){
tmp = 0;
for(j=0;j while(nd[j].b>0&&tmp+nd[j].v<=c){
tmp += nd[j].v;
nd[j].b--;
}
}
if(tmp==c){
sum++;
tmp = 0;
}
else{
for(j=n-1;j>-1;j--){
while(nd[j].b>0&&tmp+nd[j].v nd[j].b--;
tmp += nd[j].v;
}
if(nd[j].b>0&&tmp+nd[j].v>=c){
nd[j].b--;
tmp = 0;
sum++;
break;
}
}
}
if(tmp!=0){
break;
}
flag = true;
for(j=0;j if(nd[j].b>0){
flag = false;
break;
}
}
if(flag)break;
}
printf("%d\n",sum);
}
return 0;
}