Online Judge | Problem Set | Authors | Online Contests | User | ||||||
---|---|---|---|---|---|---|---|---|---|---|
Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest |
送代码~#include<cstdio> #include<cstring> #include<cstdlib> #include<algorithm> using namespace std; #define udv(a,b) ((a%b)?(a/b+1):(a/b))//向上取整除法 #define ddv(a,b) (b?(a/b):0x3f3f3f3f)//向下取整防0除法 int n,c,ans,sta=1; int tme[25],mnc,ub[25]; struct Coin{ int v,b; }cn[25]; bool cmp(struct Coin a,struct Coin b) { return a.v<b.v; } void init() { scanf("%d%d",&n,&c); int v,b; for(int i=1;i<=n;i++) { scanf("%d%d",&v,&b); cn[i].v=v;cn[i].b=b; } sort(cn+1,cn+n+1,cmp); mnc=udv(c,cn[1].v); for(int i=2;i<=n;i++) tme[i]=cn[i].v/cn[i-1].v; } int main() { init(); ub[sta]=mnc; for(int i=sta+1;i<=n;i++) { ub[i]=ub[i-1]/tme[i]; ub[i-1]%=tme[i]; } while(1) { int d=0x3f3f3f3f; for(int i=n;i>=sta+1;i--) { if(ub[i]) { if(ub[i]>cn[i].b) { ub[i-1]+=(ub[i]-cn[i].b)*tme[i]; ub[i]=cn[i].b; } d=min(d,ddv(cn[i].b,ub[i])); } } int dsta=ddv(cn[sta].b,ub[sta]); bool flg=false; while(ub[sta]>cn[sta].b) { if(sta>=n) { flg=true;break; } ub[sta+1]+=udv(ub[sta],tme[sta+1]); sta++; dsta=ddv(cn[sta].b,ub[sta]); } d=min(d,dsta); if(flg)break; ans+=d; for(int i=sta;i<=n;i++) cn[i].b-=d*ub[i]; } printf("%d",ans); return 0; } Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator