• P3817 小A的糖果题解


    题目传递门
    首先我们可以把这几个糖果盒分对来讨论; 先从第一个糖果盒和第二个开始; 如果一个糖果盒的数量就超限了,我们当然至少要把它吃到剩下(x)个; 然后如果单论两个都没有超限,但加起来超限了怎么办呢? 首先第一个糖果盒是只有一个分组的(和第二个), 而第二个糖果盒却有两个分组(和第(1)个/和第(3)个); 所以如果我们吃掉第一个里的,只会减少一个分组的量,而如果吃掉第二个里的,可以减少(2)个分组的量。所以我们要尽量吃掉第二个里的糖果。 处理好第一个分组后,来看第二个,因为第一个分组已经被处理好了,所以可以无视它,然后问题又变成了前一个问题。 以此类推就好了。

    #include <bits/stdc++.h>
    
    using namespace std;
    typedef long long LL;
    //题解:都要吃最后的,这样才最少。
    const int N = 100010;
    int a[N];
    
    LL ans = 0; //因为是累加和,注意小心是long long
    int n, x;   //糖果盒的个数 n,给定的参数 x(不能超过x)
    
    int main() {
        cin >> n >> x;
        for (int i = 1; i <= n; i++) cin >> a[i];
    
        for (int i = 1; i < n; i++) {
            if (a[i] + a[i + 1] > x) { //两个长度的滑动窗口
                ans += a[i + 1] + a[i] - x; //吃掉的糖数量
                a[i + 1] = x - a[i];        //a[i+1]剩余的数量。这个差,要在后面那个盒子里出,这样才最有效。
            }
        }
        cout << ans << endl;
        return 0;
    }
    
    
  • 相关阅读:
    第一篇代码 嗨翻C语言 21点扑克
    Windows7 sp1 64位下安装配置eclipse+jdk+CDT+minGW
    MinGW-64 安装
    Windows Live Writer配置步骤
    Css 居中
    c++ 常量成员函数
    c/c++ 引用计数
    C++ 《STL源码剖析》学习-vector
    C/C++ 有符号数和无符号数
    cocos2d 内存管理机制
  • 原文地址:https://www.cnblogs.com/littlehb/p/15034953.html
Copyright © 2020-2023  润新知