o.boj 1451 贪吃的Tomato

 
注:最近这一系列ACM的内容,都是2年多之前的代码,自己回顾一下。
 
 
贪吃的Tomato
 
Submit: 713   Accepted:358
Time Limit: 1000MS  Memory Limit: 65536K
Description
Tomato是一个贪吃的小孩,每一天他都要吃很多的东西,这一次Tomato参加了912吃豆大赛,在大赛上一共有m种豆子可以吃,每一种豆子的分值是不一样的,谁吃的豆子的分值总和最大就是优胜者,Tomato目前的主要竞争对手是大胃王Wangkun和Gleiz,还有一匹黑马Cloudiris,毕竟Tomato不是神仙,他的胃最多可以装n个豆子,Tomato希望能吃到尽量多的分数,你能帮帮他吗?

Input
每一组数据有3行,第一行是n和m,(n<=1000,m<=1000),当n=0,m=0时输入结束;
第二行有m个数,第i个数表示第i种豆子的个数。
第三行有m个数,第i个数表示第i种豆子的分值。


Output
一个数字Tomato最多能获得的分数。

Sample Input

2 3
1 1 1
1 2 3
3 2
1 1
1 2
0 0


Sample Output

5
3


Source
Tomato


排序,先吃分值高的豆子。
 
#include <iostream>
using namespace std;

typedef struct DouZi
{
    long c;
    long w;
}Douzi;

int cmp(const void *a, const void *b)
{
    return ((Douzi*)b)->w - ((Douzi*)a)->w;
}

int main()
{
    Douzi D[1010];
    long n, m;
    long sum = 0;
    
    cin >> n >> m;
    
    while (n || m)
    {
        sum = 0;
        
        for (long i = 0; i < m; i++)
            cin >> D[i].c;
        
        for (long i = 0; i < m; i++)
            cin >> D[i].w;
        
        qsort(D, m, sizeof(Douzi), cmp);
        
        //for (long i = 0; i < m; i++)
        //    cout << D[i].w << endl;;
             
        for (long i = 0; i < m && n; i++)
        {            
            if (n >= D[i].c)
            {
                sum += D[i].w * D[i].c;
                n -= D[i].c;
            }
            else
            {
                sum += D[i].w * n;
                n = 0;
            }
        }
        
        cout << sum << endl;
        cin >> n >> m;        
    }
    return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值