1
+ /*
2
+ ***************************************************************************************************************
3
+
4
+ Author : SUBHENDU SETHI
5
+ Hackerrank Handle: subhendu_sethi
6
+ Codechef Handle: subhendu_sethi
7
+ SPOJ Handle: codekatte
8
+ Codeforces Handle: subhendu_sethi
9
+ UVA Handle: codekatte
10
+
11
+ **************************************************************************************************************
12
+ */
13
+ #include < bits/stdc++.h>
14
+ using namespace std ;
15
+
16
+ #define ll long long
17
+ #define si (x ) scanf(" %d" ,&x)
18
+ #define sl (x ) scanf(" %lld" ,&x)
19
+ #define slu (x ) scanf(" %llu" ,&x)
20
+ #define sd (x ) scanf(" %lf" ,&x)
21
+ #define sc (x ) scanf(" %c" ,&x)
22
+ #define ss (x ) scanf(" %s" ,x)
23
+ #define vl vector<ll>
24
+ #define vi vector<int >
25
+ #define pb push_back
26
+ #define MOD 1000000007
27
+ #define MAXN 105050
28
+ #define SQRT 330
29
+ #define ls (node<<1 )
30
+ #define rs ((node<<1 )+1 )
31
+ #define ii pair<int ,int >
32
+ #define F first
33
+ #define S second
34
+ #define f (i,a,b ) for (int i=a;i<b;i++)
35
+ ll dp[250 ][250 ];
36
+ char S[250 ];
37
+ ll n,t;
38
+ ll num0[250 ];
39
+ ll num1[250 ];
40
+ inline void refresh ()
41
+ {
42
+ memset (dp,-1 ,sizeof (dp));
43
+ memset (num0,0 ,sizeof (num0));
44
+ memset (num1,0 ,sizeof (num1));
45
+ }
46
+ inline void read ()
47
+ {
48
+ sl (t);
49
+ }
50
+ ll rec (int a, int b)
51
+ {
52
+ if (dp[a][b] != -1 ){
53
+ return dp[a][b];
54
+ }
55
+ else if (a>b){
56
+ return dp[a][b] = 0 ;
57
+ }
58
+ else if (a == b)
59
+ {
60
+ if (S[a] == ' 0' )
61
+ return dp[a][b] = 0 ;
62
+ return dp[a][b] = 1 ;
63
+ }
64
+ else
65
+ {
66
+ ll tot0 = num0[b];
67
+ ll tot1 = num1[b];
68
+ if (a!=0 ){
69
+ tot0-=num0[a-1 ];
70
+ tot1-=num1[a-1 ];
71
+ }
72
+ if (tot1>tot0)
73
+ return dp[a][b] = (b-a+1 );
74
+ else
75
+ {
76
+ ll ret = 0 ;
77
+ for (int i=a;i<b;i++)
78
+ {
79
+ ret = max (ret,rec (a,i)+rec (i+1 ,b));
80
+ }
81
+ return dp[a][b] = ret;
82
+ }
83
+ }
84
+ }
85
+ inline void solve ()
86
+ {
87
+ while (t--)
88
+ {
89
+ refresh ();
90
+ sl (n);
91
+ scanf (" %s" ,S);
92
+ f (i,0 ,n)
93
+ {
94
+ if (S[i] == ' 0' )
95
+ num0[i]=1 ;
96
+ else
97
+ num1[i]=1 ;
98
+ }
99
+ f (i,1 ,n)
100
+ {
101
+ num0[i]+=num0[i-1 ];
102
+ num1[i]+=num1[i-1 ];
103
+ }
104
+ ll ans = rec (0 ,n-1 );
105
+ printf (" %lld\n " ,ans);
106
+ }
107
+ }
108
+ int main ()
109
+ {
110
+ read ();
111
+ solve ();
112
+ return 0 ;
113
+ }
0 commit comments