HDU 1009
阿新 • • 發佈:2018-12-10
很簡單的一道貪心演算法的題,就是揹包問題換個叫法,注意輸出的精度即可!!!
AC 程式碼:
#include <iostream>
#include <stdlib.h>
#include <algorithm>
#include <iomanip>
using namespace std;
struct bag{
int w; //每個房間的Javabean的數量
int v; //交換時需要的cat food
double w_v; //價效比
};
//實現降序排列
bool cmp(bag x,bag y){
return x.w_v>y.w_v;
}
int main(){
bag *b;
//n個房間,cat food總量為m
int n,m;
while(cin>>m>>n){
b = new bag[n];
//struct bag b[n];
if(n==-1 && m==-1)
break;
for (int i=0;i<n;i++){
cin>>b[i].w>>b[i].v;
b[i].w_v=(double)b[i].w/b[i].v;
}
sort(b,b+n,cmp);
double maxW=0;
for(int i=0;i<n;i++){
if(b[i].v<=m){
maxW+=b[i].w;
m-=b[i].v;
}else {
//這裡要按比例交換
maxW+=((double)m/b[i].v)*b[i].w;
m=0;
break;
}
}
//控制輸出的精度
cout <<setiosflags(ios::fixed)<<setprecision(3)<<maxW<< endl;
}
return 0;
}
/*
5 3
7 2
4 3
5 2
20 3
25 18
24 15
15 10
-1 -1
13.333
31.500
*/
執行結果
?程式碼裡我用bag *b; b = new bag[n];
時就可以AC,用struct bar b[n]
時就會由編譯錯誤,不知道咋回事