涛神的城堡
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 4Sample 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 }
时间: 2024-10-10 08:41:03