class Solution {
public int maximumsSplicedArray(int[] nums1, int[] nums2) {
int n = nums1.length;
int[] b = new int[n];
int[] c = new int[n];
dp(nums1,nums2,b);
dp(nums2,nums1,c);
int sum1 = 0;
int sum2 = 0;
for (int i = 0; i < n; i++) {
sum1 += nums1[i];
sum2 += nums2[i];
}
int max = 0;
int dpmax = 0;
for (int i = 0; i < n ; i++) {
if( b[i] > dpmax){
dpmax = b[i];
}
}
max = dpmax + sum2;
dpmax = 0;
for (int i = 0; i < n ; i++) {
if( c[i] > dpmax){
dpmax = c[i];
}
}
max = Math.max(max,dpmax+sum1);
return max;
}
public void dp(int[] nums1,int[] nums2,int[] b){
int n = nums1.length;
int last = 0;
for (int i = 0; i < n; i++) {
if( last < 0 ){
b[i] = nums1[i] - nums2[i];
}else{
b[i] = last + nums1[i] - nums2[i];
}
last = b[i];
}
}
}