Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- using namespace std;
- const int MAX_N = 1001;
- int L, N;
- vector<string> words, answer;
- int memo[MAX_N];
- int solve(int i) {
- if (i >= N) return 0;
- if (memo[i] != -1) return memo[i];
- int ret = INT_MAX;
- int size = 0;
- for (int j = i; j < N; j++) {
- if (j != i and size + words[j].size() + 1 > L) break;
- if (j == i and size + words[j].size() > L) break;
- size += words[j].size();
- if (j != i) size += 1;
- ret = min(ret, solve(j+1) + (L-size)*(L-size));
- }
- return memo[i] = ret;
- }
- int main(void) {
- memset(memo, -1, sizeof memo);
- cin >> L >> N;
- memo[N] = 0;
- for (int i = 0; i < N; i++) {
- string word;
- cin >> word;
- words.push_back(word);
- }
- //cout << solve(0) << endl;
- solve(0);
- for(int i = 0; i < N; i++){
- int size = 0;
- for(int j = i; j < N; j++){
- size += words[j].size();
- if(size > L) break;
- }
- }
- for(int i = 0; i < N; i++){
- int id = i, size = 0;
- for (int j = i; j < N; j++) {
- size += words[j].size();
- if (j != i) size += 1;
- if(memo[j+1] + (L-size)*(L-size) == memo[i]){
- //cout << "caiu aqui" << endl;
- id = j;
- break;
- }
- }
- for(int j = i; j < id; j++){
- cout << words[j] << " ";
- }
- cout << words[id] << endl;
- i = id;
- }
- /*for (int i = N-1; i >= 0; i--) {
- cout << memo[i] << endl;
- }*/
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement