NOI:1797 金银岛

题目链接:http://noi.openjudge.cn/ch0406/1797/

NOI:1797 金银岛_第1张图片

典型的贪心问题

题解:每次选择价值/重量比最大的,注意精确到小数点后2位,所以需要使用double

#include 
#include 
#include 
#include 
#include 
#include 
using namespace std;
struct point {
    int n,v;
    
};
bool compare(point a,point b){
    return a.v/a.n>b.v/b.n;
}
int main(){
    int k;
    cin>>k;
    while(k--){
        int w,s;
        cin>>w>>s;
        point a[s];
        for(int i=0;i>tmp.n>>tmp.v;
            a[i]=tmp;
        }
        sort(a,a+s,compare);
        double size=0.0,result=0.0;
        for(int i=0;i=w){
                result+=(double)(w-size)*(double)a[i].v/a[i].n;//千万不能把a[i].v/a[i].n括住
                break;
            }
            size+=(double)a[i].n;
            result+=(double)a[i].v;
        }
        printf("%.2f\n",result);
        
    }
}

你可能感兴趣的:(贪心,NOI)