zoukankan      html  css  js  c++  java
  • UVA11054Gergovia的酒交易

    题意:
          有n个村庄,每个村庄要么买酒要么买酒,负数是买酒,整数是买酒,题目保证所有的数字想加和为0,保证有解,然后每一个村庄往相邻的村庄运k坛酒的花费是k,问满足所有的村庄的最小花费是多少?


    思路:
          比较容易想,直接扫一遍就行了,我们从左到右,开一个变量记录当前这个点前面的和,假如是整数,说明前面整体还是卖酒的,假如是负数说明是买酒的,不论是正是负,当前这一步必须也最少要花sba(sum)那么多钱,就这样更新到最后就行了,为什么这样会是对的,很容易理解,sum+=num[i]如果是正+负就是说前面的要买到当前的位置,当然是能卖就卖了,难道还继续带着往后走?如果是正+正,说明前面有剩余,现在这家也是要卖酒,那么没办法,这能一起往右买了,同理还有两种情况,就不解释了,具体细节看代码,还有就是记得longlong,一开始大意了WA了一次。
          
          


    #include<stdio.h>


    long long abss(long long x)
    {
        return x > 0 ? x : -x;
    }


    int main ()
    {
        long long i ,n ,Ans ,num ,sum;
        while(~scanf("%lld" ,&n) && n)
        {
           Ans = sum = 0;
           for(i = 1 ;i <= n ;i ++)
           {
              scanf("%lld" ,&num);
              sum += num;
              Ans += abss(sum);
              
           }
           printf("%lld " ,Ans);
        }
        return 0;
    }

  • 相关阅读:
    欢迎使用CSDN-markdown编辑器
    欢迎使用CSDN-markdown编辑器
    Math类简介
    Math类简介
    http_server
    tcp服务器
    swoole安装
    laravel源码解析
    VMware的Unity模式
    string.format() %d越界的问题
  • 原文地址:https://www.cnblogs.com/csnd/p/12062614.html
Copyright © 2011-2022 走看看