题解 | 乘之

乘之

https://www.nowcoder.com/practice/27f9544dca8642869afdc230f62400a8

对于本题,假设k>0,那么对于小龙来讲,就必须尽量选择更多的正数,小蛇则是更多的负数,那么对于原数组a,我们可以将数组a中的数字看作一段一段的连续正数和连续负数的段的排列,假设1 1 -4 -5 1 4,就可以视为 1 1,-4 -5, 1 4,这样的三段,那么对于小龙来讲,他一定会选择第一段的1 1,去扩大新数组的和,那么小蛇就一定会把-4 -5这一段给选择了,这样就会减小新数组的和,但是由于小蛇将相邻的两段正数段中间的负数段给取走了,那么小龙的最优解就会变成从左正段一直取到右正段,将中间的负数段给覆盖,然后小蛇也是这个过程,将中间的正数段给覆盖,直至将整个数组取完

那么我们很容易就能发现,小龙的最优解就是直接将整个数组都给取光,因此本题的最终答案就是数组a中的所有元素相加再乘k

#include<bits/stdc++.h>
using namespace std;
#define ll long long
int main() {
    ios::sync_with_stdio(0);
    cin.tie(0);
    ll t;
    cin >> t;
    while (t--) {
        ll n, k;
        cin >> n >> k;
        vector<ll> a(n + 1, (0)), ap;
        for (int i = 1; i <= n; ++i) cin >> a[i];
        ll ans = 0;
        for (int i = 1; i <= n; ++i) ans += (k * a[i]);
        cout << ans << endl;
    }
}

全部评论

相关推荐

03-24 17:57
门头沟学院 Java
yakuso:你这头像哈哈哈
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务