考虑区间一定要连续分割,dp[m] 表示前缀xor和为m时的分割数,
那么dp[m] = dp[m] + 1;
因为这里区间可以不连续,所以加一个cur_max 记录一下就好了。这里可能有点不好理解,因为虽然当前前缀和为m,但是可以不连续划分,所以他可以的计数可以为前面所有点的max。
最后-1是因为需要处理 第一次划分,第一段前缀不为0的情况.
import java.util.Scanner;
public class Main{
public static void main(String[] args){
Scanner sc=new Scanner(System.in
);
Integer n=Integer.parseInt(sc.nextLine());
String str=sc.nextLine();
String[] st=str.split(" ");
int start=0;
int m=0;
for(int i=0; i<st.length; i++){
if(Integer.parseInt(st[i]) == 0){
m++;
start=i + 1;
continue;
}
for(int j=start;j<i;j++){
int flag=0;
for(int k=j; k<=i; k++)
flag ^= Integer.parseInt(st[k]);
if(flag == 0){
m ++;
start=i + 1;
continue;
}
}
}
System.out.println(m);
}
}