注册 登录
编程论坛 C++ Builder

一道很水的贪心是re,帮我看看好嘛

w331863001 发布于 2016-01-22 11:36, 6149 次点击
http://paste.


#include<iostream>
#include<algorithm>
#include<vector>
#include<algorithm>
#include<iomanip>
#include<functional>
using namespace std;

int main(){
    while(1){
        vector<double> vector1,vector2,vector3;
        int food,room;
        double sum=0;
        cin>>food>>room;
        if(food==-1&&room==-1) break;
        for(int i=0;i<room;i++){
            double temp1,temp2;
            cin>>temp1>>temp2;
            vector1.push_back(temp1);
            vector2.push_back(temp2);
        double temp3= temp1/temp2;
        vector3.push_back(temp3);
        }
        while(food!=0){
        vector<double>::iterator p=max_element(vector3.begin(),vector3.end());
        int x=distance(vector3.begin(),p);
      //  cout<<x<<"*"<<endl<<*p<<endl;
        if(vector2[x]>=food) {
                sum += (food/vector2[x]*vector1[x]);
                cout<<fixed<<setprecision(3)<<sum<<endl;
                food=0;
        }
        else {
                food -=vector2[x];
                sum +=vector1[x];
                vector3[x]=0;
               // cout<<sum<<endl;
        }
    }
}
2 回复
#2
w3318630012016-01-22 11:36
//很水的贪心

/*
题目大意:
老鼠有M磅猫食。有N个房间,每个房间前有一只猫,房间里有老鼠最喜欢的食品JavaBean,J[i]。若要引开猫,必须付出相应的猫食F[i]。当然这只老鼠没必要每次都付出所有的F[i]。若它付出F[i]的a%,则得到J[i]的a%。求老鼠能吃到的做多的JavaBean。
解题思路:
老鼠要获得最多的食品,就要用最小的猫食换取最多的猫食,这就要求J[i]/F[i]的比例要大。J[i]/F[i]的比例越大,证明在这个房间,小鼠付出得到的收获最有价值。于是我们将设置结构体,结构体里设置percent放置J[i]/F[i]。然后对结构体数组进行排序。依次按比例排序的付出猫食,即可。

Sample Input
5 3
7 2
4 3
5 2
20 3
25 18
24 15
15 10
-1 -1
 
Sample Output
13.333
31.500  

虽然后期得到了标准解
但是还是想知道为什么最初设计的
这个程序是
“Runtime Error
(ACCESS_VIOLATION) ”

Runtime Error
(ACCESS_VIOLATION)

*/
#3
归云居2016-01-28 11:27
帮你顶一下
1