涛神的城堡
Time Limit : 3000/1000ms (Java/Other) Memory Limit : 65535/32768K (Java/Other)
Total Submission(s) : 42 Accepted Submission(s) : 8
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
1 #include<iostream>
2 #include<stdio.h>
3 #include<string.h>
4 #include<algorithm>
5 using namespace std;
6 int a[10005];
7 int sum[10005];
8 int main()
9 {
10 int n,m,strong;
11 while(~scanf("%d%d%d",&n,&m,&strong)){
12 for(int i=1;i<=n;i++){
13 scanf("%d",&a[i]);
14 }
15 int tmp;
16 memset(sum,0,sizeof(sum));
17 sum[1]=strong-a[1];
18 for(int i=2;i<=n;i++){
19 tmp=strong-a[i];
20 sum[i]=sum[i-1]+tmp;
21 }
22 long long ans=0;
23 int st,en;
24 for(int i=0;i<m;i++){
25 scanf("%d%d",&st,&en);
26 if(sum[en]-sum[st-1]>0)
27 ans+=sum[en]-sum[st-1];
28 }
29 cout<<ans<<endl;
30 }
31 return 0;
32 }