杭電oj--1009(貪心演算法)
阿新 • • 發佈:2018-11-23
思路分析:先把每個倉庫的價效比資訊計算出來,然後在按價效比大小降序排列(從大到小),先把當前價效比大換掉,最後再把剩下的食物和當前 i 的價效比相乘,由此可AC.
#include<iostream> #include<vector> using namespace std; struct info{ int J; int M; double cost; }; struct info I; int main(){ int n,i,j; int food; double sum; vector<info> p;//定義一個info的結構體陣列 while(cin>>food>>n){ sum=0; if(food==-1&&n==-1)break; p.clear(); for(i=0;i<n;i++){ cin>>I.J>>I.M; I.cost=I.J/(double)I.M; p.push_back(I); } for(i=1;i<=n;i++)//價效比降序 for(j=0;j<n-i;j++) if(p[j].cost<p[j+1].cost) swap(p[j],p[j+1]);//(這是vector的函式) for(i=0;i<n;i++) if(food>=p[i].M){ sum+=p[i].J; food-=p[i].M; } else{ sum+=food*p[i].cost; break; } printf("%.3f\n",sum); } return 0; }