首页 新闻 会员 周边

HDOJ 1009

0
悬赏园豆:5 [已解决问题] 解决于 2012-07-13 20:03
View Code
//hdoj 1009 豚鼠交易
#include <iostream>
#include <stdlib.h>
#include <iomanip>
using namespace std;
int m,n,i,j;
float sig=10000;
int flag;
float rest,smax=0;
int main(void){
    while(cin>>m>>n){
        if(m==-1&&n==-1) break;/////////
        smax=0;
        float *J=new float[n];
        float *F=new float[n];
        float *S=new float[n];
        int *TAB=new int[n];
        for(i=0;i<n;i++){
            cin>>J[i]>>F[i];
            S[i]=J[i]/F[i];
        }
        flag=0;
        sig=0;
        for(i=0;i<n;i++){
            for(j=0;j<n;j++){
                if(S[j]!=-1){
                    if(sig<S[j]){
                        sig=S[j];
                        flag=j;
                    }
                }
            }
            S[flag]=-1;
            TAB[i]=flag;
            sig=0;
        }
        rest=m;
        for(i=0;i<n;i++){
            if(rest>=F[TAB[i]]){
                smax=smax+J[TAB[i]];
                rest=rest-F[TAB[i]];
            }else{
                smax=smax+rest*(J[TAB[i]]/F[TAB[i]]);
                rest=0;
            }
        }
        cout<<setiosflags(ios::fixed)<<setprecision(3)<<smax<<endl;
        smax=0;
    }
    return 0;
}

在自己机子上能过。。。不过一提交就WA,为什么呢?

coderLuan的主页 coderLuan | 初学一级 | 园豆:197
提问于:2012-06-13 20:17
< >
分享
最佳答案
0

这个是一个简单的贪心题,acm也并不是示例input,output没问题就没问题。这是acm比较有意思的地方(说来也离开acm队一年多了,呵呵)。另外这个你最好用struct组织数据,比较清晰,排序算法也有现成的,你自己琢磨琢磨下面我的代码吧:其中vector可以看成数组,祝您好运哈!!加油……

#include <iostream>
#include <cstdio>
#include <vector>
#include <algorithm>
#include <iomanip>

using namespace
std;

struct
t_f
{

    int
t,f;
};


int
n,m;
int
i;
double
sum;

int
cmp(t_f a,t_f b)
{

    return
(double)a.t/a.f > (double)b.t/b.f;
}


int
main()
{

    while
(cin>>m>>n&&(n!=-1||m!=-1))
    {

        vector<t_f>a(n);
        for
(i=0;i<n;i++)
        {

            cin>>a[i].t>>a[i].f;
        }

        sort(a.begin(),a.end(),cmp);
        sum=0;
        for
(i=0;m&&i<n;i++)
        {

            if
(m>=a[i].f)
            {

                sum+=a[i].t;m-=a[i].f;
            }

            else

            {

                sum+=(double)(a[i].t)*m/a[i].f;m=0;
            }
        }

        cout<<fixed<<setprecision(3)<<sum<<endl;
    }

    return
0;
}

收获园豆:5
VincentPass | 菜鸟二级 |园豆:238 | 2012-07-13 11:26
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册