JXNU acm选拔赛 涛神的城堡

涛神的城堡

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 }



原文地址:https://www.cnblogs.com/ISGuXing/p/7258971.html