Advertisement
Guest User

Untitled

a guest
Dec 8th, 2016
77
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.47 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2.  
  3. using namespace std;
  4.  
  5. const int MAX_N = 1001;
  6.  
  7. int L, N;
  8. vector<string> words, answer;
  9. int memo[MAX_N];
  10.  
  11. int solve(int i) {
  12.     if (i >= N) return 0;
  13.     if (memo[i] != -1) return memo[i];
  14.  
  15.     int ret = INT_MAX;
  16.     int size = 0;
  17.  
  18.     for (int j = i; j < N; j++) {
  19.         if (j != i and size + words[j].size() + 1 > L) break;
  20.         if (j == i and size + words[j].size() > L) break;
  21.  
  22.         size += words[j].size();
  23.         if (j != i) size += 1;
  24.    
  25.         ret = min(ret, solve(j+1) + (L-size)*(L-size));
  26.     }
  27.    
  28.     return memo[i] = ret;
  29. }
  30.  
  31. int main(void) {
  32.     memset(memo, -1, sizeof memo);
  33.  
  34.     cin >> L >> N;
  35.     memo[N] = 0;
  36.  
  37.     for (int i = 0; i < N; i++) {
  38.         string word;
  39.         cin >> word;
  40.  
  41.         words.push_back(word);
  42.     }
  43.  
  44.     //cout << solve(0) << endl;
  45.     solve(0);
  46.  
  47.     for(int i = 0; i < N; i++){
  48.         int size = 0;
  49.         for(int j = i; j < N; j++){
  50.             size += words[j].size();
  51.             if(size > L) break;
  52.         }
  53.     }
  54.    
  55.  
  56.     for(int i = 0; i < N; i++){
  57.         int id = i, size = 0;
  58.         for (int j = i; j < N; j++) {
  59.             size += words[j].size();
  60.             if (j != i) size += 1;
  61.        
  62.             if(memo[j+1] + (L-size)*(L-size) == memo[i]){
  63.                 //cout << "caiu aqui" << endl;
  64.                 id = j;
  65.                 break;
  66.             }
  67.         }
  68.         for(int j = i; j < id; j++){
  69.             cout << words[j] << " ";
  70.         }
  71.         cout << words[id] << endl;
  72.  
  73.         i = id;
  74.     }
  75.  
  76.     /*for (int i = N-1; i >= 0; i--) {
  77.         cout << memo[i] << endl;
  78.     }*/
  79.  
  80.     return 0;
  81. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement