涛神的城堡

涛神的城堡

Time Limit : 3000/1000ms (Java/Other)   Memory Limit : 65535/32768K (Java/Other)
Total Submission(s) : 54   Accepted Submission(s) : 13

Font: Times New Roman | Verdana | Georgia

Font Size: ← →

Problem Description

涛神有一个城堡给游客参观,涛神特别的强壮,涛神的强壮值是strong,每个游客也有自己的强壮值,涛神为了赚钱,他会选取多个区间去打劫别人,所以如果比涛神弱的,他就要收取他们的强壮值的差值,但是还是有比涛涛强壮的,所以涛涛打劫那个人的话,涛涛要给那个人他们的强壮值的差值,所以涛涛可以选择打不打劫那个区间的人,(人是可以重复打劫的,区间不行)涛涛最多能赚多少钱呢?

Input

第一行给你三个整型变量n,m,strong(1≤n,m≤10000,1≤strong≤200),
第二行给你n个人的强壮值a1,a2,...,an(1≤ai≤200).
接下来m行给你两个整型变量l,r(1≤li≤ri≤n),代表区间里包括了第l个游客到第r个游客,涛涛可以选择打不打劫这个区间

Output

输出涛涛可以打劫到的最多的钱

Sample Input

5 4 10
9 12 9 7 14
1 2
4 5
3 4
1 4

Sample Output

7

题目有毒,题目说区间不行,但必须按可以取重复的区间才能A;
 1 #include <iostream> 
 2 #include <cstdio>
 3 #include <cstring>
 4 #define M 10015
 5 #define  ll long long int
 6 using namespace std;
 7 int a[M];
 8 int main(){
 9     int n,m,strong;
10     while(scanf("%d%d%d",&n,&m,&strong)!=EOF){
11         for(int i=1;i<=n;i++){
12             ll t;
13             scanf("%lld",&t);
14             a[i]=a[i-1]+strong-t;
15         }
16         ll cnt=0;
17         for(int i=0;i<m;i++){
18             ll x,y;
19             scanf("%lld%lld",&x,&y);
20             ll sum=a[y]-a[x-1];
21             if(sum>0)
22                 cnt+=sum;
23         }
24         printf("%lld
",cnt);
25         memset(a,0,sizeof(a));
26     }
27 
28     return 0;
29 }


原文地址:https://www.cnblogs.com/zllwxm123/p/7260362.html