1. 程式人生 > >HDU 1009

HDU 1009

這裡寫圖片描述

很簡單的一道貪心演算法的題,就是揹包問題換個叫法,注意輸出的精度即可!!!

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]時就會由編譯錯誤,不知道咋回事