NC14719. ZZZZone爱吃糖
描述
输入描述
第一行,一个整数n,表示有n个糖果盒子 (n <= 10000)
第二行包含n个整数,表示从下标为1到n的盒子的甜蜜值(-10000 <= wi <= 10000)
第三行包含一个整数m表示方案数 (m <= 10000)
接下来m行,每行两个整数L, R (1 <= L, R <= n)
输出描述
输出一行,包含一个整数表示最大的甜蜜值.
示例1
输入:
5 1 -2 3 -4 5 2 1 5 1 2
输出:
3
说明:
第一个方案从1到5可得到3的甜蜜值,第二个可以得到-1的甜蜜值(此时当然不会选这个方案),所以最大可得到3的甜蜜值pypy3 解法, 执行用时: 255ms, 内存消耗: 27996K, 提交时间: 2021-12-03 19:49:42
n = int(input()) a = list(map(int, input().split())) pre = [0 for i in range(0, n + 2)] for i in range(1, n + 1) : pre[i] = pre[i - 1] + a[i - 1] m = int(input()) ans = 0 while m > 0 : m -= 1 l, r = map(int, input().split()) if pre[r] - pre[l - 1] >= 0 : ans += pre[r] - pre[l - 1] print(ans)
C 解法, 执行用时: 12ms, 内存消耗: 372K, 提交时间: 2022-02-17 12:49:11
#include<stdio.h> int main() { int m,n,i,l,r,k; long int x=0; scanf("%d",&n); int a[n]; for(i=0;i<n;i++) { scanf("%d",&a[i]); } scanf("%d",&m); while(m--) { k=0; scanf("%d %d",&l,&r); for(i=l-1;i<r;i++) { k=k+a[i]; } if(k>0) { x=x+k; } } printf("%ld\n",x); return 0; }
C++11(clang++ 3.9) 解法, 执行用时: 39ms, 内存消耗: 384K, 提交时间: 2017-12-30 14:57:24
#include<iostream> using namespace std; int main() { int a[10001]={0},l,r,n,m; long long int s,max=0; cin>>n; for(int i=1;i<=n;i++) cin>>a[i]; cin>>m; for(int k=0;k<m;k++) { cin>>l>>r;s=0; for(int i=l;i<=r;i++) s+=a[i]; if(s>0) max+=s; } cout<<max<<endl; return 0; }