From a83f2973119d6388cd524ff7170730326e334b0f Mon Sep 17 00:00:00 2001 From: Kirito <1362050620@qq.com> Date: Thu, 21 Apr 2016 10:26:40 +0800 Subject: [PATCH] Create 3040.cpp --- POJ/3040.cpp | 105 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 105 insertions(+) create mode 100644 POJ/3040.cpp diff --git a/POJ/3040.cpp b/POJ/3040.cpp new file mode 100644 index 0000000..e8bb9a8 --- /dev/null +++ b/POJ/3040.cpp @@ -0,0 +1,105 @@ +#include +#include +#include + +#include +#include +using namespace std; + +struct cash +{ + int value; + int amount; +}; + +bool cmp(const cash& a,const cash& b) +{ + return a.value& vec,int C) +{ + memset(need,0,sizeof(int)*64); + int N=vec.size(); + int left=C; + for(int i=N-1;i>=0;i--) + {// + if(vec.at(i).amount>0&&left>0) + { + int x=left/vec.at(i).value; + x=min(x,vec.at(i).amount); + need[i]=x; + left-=x*vec.at(i).value; + } + } + if(left>0) + { + for(int i=0;ineed[i]&&left>0) + { + int x=left/vec.at(i).value; + if(x==0) + { + /// try to make x = 1 + need[i]++; + left=0; + break; + } + } + } + } + if(left>0) + { + return -1; + } + int canpayday=2<<29; + for(int i=0;i<64;i++) + { + if(need[i]>0) + { + canpayday=min(canpayday,vec.at(i).amount/need[i]); + } + } + if(canpayday<=0) return -1; + for(int i=0;i0) + { + vec.at(i).amount-=canpayday*need[i]; + } + } + return canpayday; + +} +int main() +{ + int N,C; + scanf("%d %d",&N,&C); + vector vec; + int ans=0; + for(int i=0;i=0;i--) + { + if(vec.at(i).value>=C) + { + ans+=vec.at(i).amount; + vec.pop_back(); + } + else break; + } + int tmp; + while((tmp=makedayfrom(vec,C))>0) + { + ans+=tmp; + } + printf("%d\n",ans); + return 0; +}