若是凉夜已成梦

青春里 总有些事情要努力去做 总有些梦想要拼命去追。


  • 运维

  • 前端

  • 编程

  • 随笔

  • hust-oj

3394: 挑剔的H胖胖

发表于 2017-10-06   |   分类于 HUSTOJ   |   阅读次数 3,431

题目描述

最近H胖胖可爱吃东西了,既想吃草莓,又想吃菠萝,还想吃肉夹馍,可是他有点挑剔,想吃的任何东西都有一个最小值(本胖胖最少要这些才不会不高兴),当然也有最大值(给本胖胖过多,本胖胖也不会喜欢的),为了使胖胖的心情值最大,请大家帮帮忙。

输入

现在给出胖胖需要的物品总量N(1<=N<=100)和自身能给的物品总数M(1<=M<=10000),之后N行,每行三个数字k1,k2,k3,k1表示对此物品需要的最小值,k2表示对此物品需求的最大值,k3表示胖胖每得到一个此物品之后的心情值。

输出

输出H胖胖最大的心情值,若能给的物品总数小于H胖胖要求每件物品最小值之和,则输出-1.

样例输入

3 5
1 4 2
1 2 5
2 2 1

样例输出

14

参考代码

#include<stdio.h>
#include<stdlib.h>
typedef struct 
{
    int min;
    int max;
    int happy;
}
std;
int main() 
{
    int m,n;
    scanf("%d%d",&m,&n);
    std a[m];
    int i,j;
    for (i=0;i<m;i++) 
    {
        scanf("%d %d %d",&a[i].min,&a[i].max,&a[i].happy);
    }
    for (i=0;i<m-1;i++) 
    {
        int k=i;
        for (j=i+1;j<m;j++) 
        {
            if(a[k].happy<a[j].happy) 
            {
                k=j;
            }
        }
        std t=a[k];
        a[k]=a[i];
        a[i]=t;
    }
    i=0;
    int happya=0;
    int now=0;
    int minsum=0;
    for (i=0;i<m;i++) 
    {
        minsum+=a[i].min;
    }
    if(minsum>n) 
    {
        printf("-1n");
    }else{
        n=n-minsum;
        int i;
        for(i=0;i<m;i++){
            a[i].max=a[i].max-a[i].min;
            happya+=a[i].happy*a[i].min;
        }
        i=0;
        while(n>0){
            if(a[i].max>0&&n>0){
                happya+=a[i].happy;
                n--;
                a[i].max--;
            }else{
                i++;
            }
        }
        printf("%dn",happya);
        }
    return 0;
}

解析

暂无

hustoj

发表评论 取消回复

要发表评论,您必须先登录。


hoxis wechat
著作权归作者所有
站点更新说明
  • 文章目录
  • 站点概览
若是凉夜已成梦

若是凉夜已成梦

青春里 总有些事情要努力去做 总有些梦想要拼命去追。

1904 日志
6 分类
12 标签
RSS
weibo github twitter facebook

友情链接

Dreams孤独患者 原站点 Skip
© 2017 若是凉夜已成梦
Powered by WordPress | 已运行
Theme By NexT.Mist