奋战杭电ACM(DAY5)1009
2013-08-28 19:36 百里小问 阅读(107) 评论(0) 编辑 收藏 举报又干了一题,今天感觉不错呀!再接再厉!晚上继续!!
不知不觉原来用到了昨天看的贪心算法~~~用了才知道这个算法就是贪心,看来还不熟练,继续加油练习!!
FatMouse' Trade
#include <iostream> #include <iomanip> using namespace std; int main() { int M,N,i,k; double javabean,tmp; while(cin >> M >> N) { if(M==-1 && N==-1) break; else { javabean=0; double *p= new double[N]; int *j= new int[N]; int *f= new int[N]; for(i=0; i<N; i++) { cin >> j[i] >> f[i]; if(f[i]==0) { javabean+=j[i]; p[i]=0; } else p[i]=(double)(j[i])/f[i]; } for(i=0; i<N-1; i++) { for(k=i+1; k<N; k++) if(p[i]<p[k]) { tmp=p[i]; p[i]=p[k]; p[k]=tmp; tmp=j[i]; j[i]=j[k]; j[k]=tmp; tmp=f[i]; f[i]=f[k]; f[k]=tmp; } } for(i=0; M>0 && i<N; i++) { if(M>=f[i]) { javabean += j[i]; M -=f[i]; } else { javabean += M*p[i]; M=0; } } cout << setiosflags(ios::fixed) << setprecision(3) << javabean << endl; } } return 0; }