涛神的城堡
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个游客,涛涛可以选择打不打劫这个区间
第二行给你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\n",cnt); 25 memset(a,0,sizeof(a)); 26 } 27 28 return 0; 29 }