SuitNdtie

PangPu

Apr 20th, 2019
138
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.21 KB | None | 0 0
  1. #include<stdio.h>
  2. int n;
  3. int arr[1010];
  4. int max(int a,int b){
  5.     return (a > b ? a : b);
  6. }
  7. //int maxa = -2e9;
  8. /*
  9. int cal(int index,int sum){
  10.     if(index > n){
  11. //      maxa = max(sum,maxa);
  12.         return sum;
  13.     }
  14. //  printf("Test %d %d\n",index,sum);
  15.     int choose = sum + arr[index];
  16.     if(choose < -30000)choose += 60001;
  17.     if(choose > 30000)choose -= 60001;
  18.     int notchoose = sum;
  19. //  if(notchoose < -30000)notchoose += 60001;
  20. //  if(notchoose > 30000)notchoose -= 60001;
  21.     return max(cal(index+1,choose),cal(index+1,notchoose));
  22. }
  23. */
  24. int main()
  25. {
  26.     scanf("%d",&n);
  27.     for(int i=1;i<=n;i++){
  28.         scanf("%d",&arr[i]);
  29.     }
  30. //  cal(1,0);
  31. //  printf("%d",maxa);
  32. //  printf("%d\n",cal(1,0));
  33.    
  34.     int dp[2][60010];
  35.     for(int i = 0 ; i < 60010 ; i ++){
  36.         dp[(n+1)%2][i] = i - 30000;
  37.     }
  38.     for(int i = n ; i >= 1 ; i --){
  39.         for(int sum = -30000 ; sum <= 30000 ; sum ++ ){
  40.             int choose = sum + arr[i];
  41.             if(choose < -30000)choose += 60001;
  42.             if(choose > 30000)choose -= 60001;
  43.             int notchoose = sum;
  44.         //  if(notchoose < -30000)notchoose += 60001;
  45.         //  if(notchoose > 30000)notchoose -= 60001;
  46.             dp[i%2][sum+30000] = max(dp[(i+1)%2][choose + 30000],dp[(i+1)%2][notchoose + 30000]);
  47.         }
  48.     }
  49.     printf("%d",dp[1][30000]);
  50.     return 0;
  51. }
Advertisement
Add Comment
Please, Sign In to add comment