您的位置:首页 > 其它

【练习12】 贪心算法 1001 FatMouse' Trade

2013-05-02 14:42 513 查看
//模板开始
#include <string>
#include <vector>
#include <algorithm>
#include <iostream>
#include <sstream>
#include <fstream>
#include <map>
#include <set>
#include <cstdio>
#include <cmath>
#include <cstdlib>
#include <ctime>
#include<iomanip>
#define SZ(x) (int(x.size()))
using namespace std;

int toInt(string s){
istringstream sin(s);
int t;
sin>>t;
return t;
}
template<class T> string toString(T x){
ostringstream sout;
sout<<x;
return sout.str();
}
typedef long long int64;
int64 toInt64(string s){
istringstream sin(s);
int64 t;
sin>>t;
return t;
}
template<class T> T gcd(T a, T b){
if(a<0)
return gcd(-a, b);
if(b<0)
return gcd(a, -b);
return (b == 0)? a : gcd(b, a % b);
}
//模板结束(通用部分)

//hdoj专题 贪心算法 1001 FatMouse' Trade
#define ARRAY_SIZE 1005

int main()
{
int m, n;
int a[ARRAY_SIZE];
int b[ARRAY_SIZE];
double c[ARRAY_SIZE];
int index;
int count;
double jb;
ifstream ifs("shuju.txt", ios::in);
while(cin>>m>>n && !(m == -1 && n == -1))//ifs>>m>>n	ifs
{
jb = 0;
memset(a, 0, ARRAY_SIZE);
memset(b, 0, ARRAY_SIZE);
memset(c, 0, ARRAY_SIZE);
for(int i = 0; i < n; i++)
{
//ifs>>a[i]>>b[i];
cin>>a[i]>>b[i];
c[i] = (a[i] + 0.0) / b[i];
}

for(int j = 0; j < n; j++)
{
index = 0;
for(int i = 1; i < n; i++)
{
if(c[i] > c[index])
{
index = i;
}
}
if(m < b[index])
{
jb += m * c[index];
c[index] = 0;
break;
}else
{
m -= b[index];
jb += a[index];
c[index] = 0;
}
}
cout<<fixed<<setprecision(3)<<jb<<endl;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: