USACO Greedy 1.4 milk

题目大意:给出工厂需要的牛奶总数,给定几个农场,有标价和容量,输出最少花费

1.4看TEXT描述就是贪心了,这道题应该比较简单,就是先排序,然后从小到大给工厂输送,每次记一下花费,最后输出就好

Note:供永远大于需;

用这道题复习下排序:

桶排:直接放在对应自己数字名字的数组中;
选择:每次找一个数放在最后,可以理解为,找第一小的,找第二小的,以此类推,注意循环的次数,大循环是1~n-1,因为最后一个数在排时其他数字已经排好,所以不用排,小循环1~n-i,因为前i个已经被放在自己的位置不用再动,时间复杂度为n的平方;
快排:找定一个基准数(习惯选择最左的数),然后两端指针向中间靠拢,一个找大于一个找小于,找到后交换,利用递归不断处理左右,最终条件啊哈算法上写的左起点大于右起点,但我觉得等于就好,手推了一边感觉问题不大,等下程序试下;
堆排:放在后面复习


伪代:
输入数据
以价格为基础排序    //在这里注意到了价格区间是0~1000,所以感觉桶排更快
for(i=0~1000)
{
    if(sup[i]!=0&&acq!=0)
    {
           if(sup[i]<acq)
        {
            acq=acq-sup[i];
            sum=sup[i]*i+sum;
        }
           else
        {
            sum=scq*i+sum;
            break;//我猜程序应该每次进行到这里就结束了
        }
    }

     输出sum
}  

 注:这里在输出之前没有考虑到为0的情况,之前是在else下面直接输出了,结果在碰到为0时就没有输出,把输出放在外面过了,还是要考虑周全。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值