fork download
  1. #include <iostream>
  2. using namespace std;
  3. #define max(a, b) (a>b?a:b)
  4. int dp[10005][1001]= {0};
  5. int main() {
  6. // your code goes here
  7. int n, a[10005]={0}, m, i,j, ans[1005]={0};
  8. scanf("%d%d",&n,&m);
  9. for(i=1; i<=n; i++){
  10. scanf("%d",&a[i]);
  11. }
  12. for(i=0;i<=10000;i++){
  13. for(j=0;j<=1000;j++){
  14. dp[i][j] = -1;
  15. }
  16. }
  17. dp[0][0] = 0;
  18. for(i=1; i<=n; i++){
  19. for(j=0; j<=1000; j++){
  20. if(dp[i-1][j] != -1){
  21. dp[i][j^a[i]] = max(dp[i][j^a[i]], dp[i-1][j]+1);
  22. }
  23. dp[i][j] = max(dp[i][j], dp[i-1][j]);
  24. if(dp[i][j] != -1){
  25. ans[j] = max(ans[j], dp[i][j]);
  26. }
  27. }
  28. }
  29. for(i=0;i<=m;i++){
  30. printf("%d\n", ans[i]);
  31. }
  32. return 0;
  33. }
Success #stdin #stdout 0.01s 54360KB
stdin
4 4
1 2 3 4
stdout
3
2
2
2
4