poj 3040(水题)
作者:互联网
#include<iostream> #include<algorithm> 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<n;i++){ scanf("%d%d",&nd[i].v,&nd[i].b); } sort(nd,nd+n,cmp); sum = 0; for(i=0;i<n;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<n;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<c){ 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<n;j++){ if(nd[j].b>0){ flag = false; break; } } if(flag)break; } printf("%d\n",sum); } return 0; }
标签:tmp,水题,int,sum,nd,break,flag,poj,3040 来源: https://www.cnblogs.com/stevenzrx/p/15647438.html