Armin
迷茫的话 TRY AGAIN 多少次都能重新再来

月饼是中国人在中秋佳节时吃的一种传统食品,不同地区有许多不同风味的月饼。现给定所有种类月饼的库存量、总售价、以及市场的最大需求量,请你计算可以获得的最大收益是多少。

注意:销售时允许取出一部分库存。样例给出的情形是这样的:假如我们有3种月饼,其库存量分别为18、15、10万吨,总售价分别为75、72、 45亿元。如果市场的最大需求量只有20万吨,那么我们最大收益策略应该是卖出全部15万吨第2种月饼、以及5万吨第3种月饼,获得 72 + 45/2 = 94.5(亿元)。

输入格式:

每个输入包含1个测试用例。每个测试用例先给出一个不超过1000的正整数N表示月饼的种类数、以及不超过500(以万吨为单位)的正整数D表示市 场最大需求量。随后一行给出N个正数表示每种月饼的库存量(以万吨为单位);最后一行给出N个正数表示每种月饼的总售价(以亿元为单位)。数字间以空格分 隔。

输出格式:

对每组测试用例,在一行中输出最大收益,以亿元为单位并精确到小数点后2位。

输入样例:
3 20
18 15 10
75 72 45
输出样例:
94.50

============================================
SRC:
#include <stdio.h>

struct 
{
    double V ;
    int store ;
} M[1000] ;

int main () 
{
    int i ,j, N , D ,tmp ;
    double result = 0.0;

    scanf ("%d" , &N ) ;
    scanf ("%d", &D) ;

    for ( i = 0 ; i < N ; i++ )
    {
        scanf("%d", &(M[i].store)) ;
    }
    for( i = 0 ; i < N ; i++)
    {
        scanf("%lf" , &(M[i].V)) ;
        M[i].V = M[i].V / M[i].store;
    }
//test
    for (i = 0 ; i < N; i++)
    {
        printf("M[%d].V = %lf\n",i, M[i].V);
        printf ("M[%d].store = %d\n",i, M[i].store );
    }

    
    for ( i = 0 ; i < N ; i++)
    {
        for ( j= i+1 ; j < N ; j++ )
        {
            if(   M[i].V < M[j].V  )
            {
                tmp  = M[i].store ;
                M[i].store = M[j].store ;
                M[j].store = tmp ;

                result = M[j].V ;
                M[j].V = M[i].V ;
                M[i].V = result ;
            }
        }
    }

    //test
    for (i = 0 ; i < N; i++)
    {
        printf("M[%d].V = %lf\n",i, M[i].V);
        printf ("M[%d].store = %d\n",i, M[i].store );
    }


    result = 0.0 ;

    for ( i = 0 ; i < N ; i++ )
    {
        if ( M[i].store  >D )
        {
            result += D * M[i].V ;
            break ;
        }
        else
        {
            D = D - M[i].store  ;

            result += M[i].store * M[i].V ;

            continue ;
        }
    }

    printf("%.2lf", result) ;
    return 0 ;

}

create a struct

D : how many tons are needed

M[i].store : how many tons does the store house keep

M[i].V : first get the total money of M[i].store

  then let M[i].V /= M[i].store 

// which mean how much it costs per ton 

 

sort M[1000] by M[i].V non-desc

for i (0,N-1)

[

  if D < M[i].store

 [ result += N*M[i].V ;

  break ;

  ]

  else

    [

  result += M[i].store * M[i].V ;

  D -= M[i].store ;

  continue ;

  ]

]

 

printf (%.2lf, result)

posted on 2013-11-29 21:59  Armin  阅读(236)  评论(0编辑  收藏  举报