long max(long long a , long long b){ //a 跟 b 都是超 int 的 还用 int 接受 if(a>b)return a; return b; } long long mod = 1e9 + 7; //低级错误 这个还犯错 int kConcatenationMaxSum(int* arr, int arrSize, int k){ int i ; long long cut = 0; long long sum= 0 ; long long pre_end = 0; long long end_pre = 0; long long ans = 0; for (i = 0 ; i < arrSize ; i++){ sum += arr[i]; } for (i = arrSize-1 ,cut = 0; i>= 0 ; i--){ cut += arr[i]; end_pre = max(end_pre,cut); } for( i = 0 ,cut = 0; i < arrSize ; i++){ cut += arr[i]; pre_end = max(pre_end , cut ); } for(i = 0,cut = 0 ; i < arrSize; i++){ cut += arr[i]; if(cut < 0)cut = 0; ans = max (cut , ans); //直接用ans接受 省了一步 } if(k == 1)return ans % mod; ans = max(ans , sum * k);//取每一种情况的最大值就好 就是答案 //ans = max(ans , pre_end +sum*(k-1)); 这两步可以不用 //ans = max(ans,end_pre+ sum*(k-1)); 这两步可以不用 if(k>=2){ ans = max (ans , sum*(k-2) + end_pre+pre_end); ans = max (ans , end_pre+pre_end); } ans %= mod; return ans; }