Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <vector>
- #include <algorithm>
- #include <map>
- #define LL long long
- #define ULL unsigned LL
- #define med(a,b,c) (a+b+c > 1)
- using namespace std;
- string s;
- int shots[300][300],
- // col[300][300],
- Arr[2][300],
- burst, n;
- int Min(int a, int b){
- if(a<b)
- return a;
- return b;
- }
- void clean(){
- for(int i=0; i<300; i++){
- for(int j=0; j<300; j++){
- shots[i][j]=0;
- }
- }
- }
- int minimum(int l, int r, int burst){
- int ans, combo, splitMin, i;
- for(i=0; i<r-l; i++){
- splitMin = Min(shots[l][l+i] + shots[l+i+1][r] , splitMin);
- }
- if(Arr[0][l] == Arr[0][r]){
- int tmp = Arr[1][l] + Arr[1][r];
- if(tmp>=burst)
- tmp = 0;
- else
- tmp = burst - tmp;
- combo = tmp + shots[l+1][r-1];
- }
- ans = Min(combo, splitMin);
- return ans;
- }
- int solve(int l, int r, int burst){
- int ans;
- for(int i=l; i<=r; i++){
- if(Arr[1][i]>=burst){
- shots[i][i] = 1;
- } else {
- shots[i][i] = burst - Arr[1][i];
- }
- }
- for(int i=l+1; i<=r; i++){
- for(int j = i; j<=r; j++){
- shots[j-i][j] = minimum(j-i, j, burst);
- }
- }
- ans = shots[l][r];
- return ans;
- }
- int main(){
- cin>>n;
- while(n--){
- cin>>burst;
- cin>>s;
- int index = 0;
- Arr[0][0] = s[0];
- Arr[1][0] = 1;
- for(int i=1; i<s.length(); i++){
- if(s[i] == Arr[0][index])
- Arr[1][index]++;
- else{
- index++;
- Arr[0][index] = s[i];
- Arr[1][index] = 1;
- }
- }
- cout<<solve(0, index, burst);
- clean();
- }
- /* for(int i=0; i<10; i++){
- cout<<Arr[0][i]<< " " <<Arr[1][i]<<endl;
- }*/
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement