uva 709 - Formatting Text(记忆化搜索)
来源:互联网 发布:设计效果图软件 编辑:程序博客网 时间:2024/05/21 07:01
题目连接:709 - Formatting Text
题目大意:给n,然后在给出一篇文章,有若干个单词,以空行结束,现在要将文章排序使得文章的badness 越小。
badness 的计算方法,如果一行只有一个单词的话,若单词的长度小于n,则badness 增加500,否则为0。
若一行有多个单词,每两个单词之间的badness = (c - 1) ^ 2 (c为两个单词的空格数),要求,每行控制长度在n,并且前一个单词顶头,后一个单词顶尾(一个单次的情况除外)
注意:输出文章方案的时候,若一行只有一个单词的时候,要直接回车,不能在输出空格。否则会PE,但是POJ上就可以过。
#include <stdio.h>#include <string.h>#include <math.h>const int L = 100;const int N = 1005;const int INF = 1 << 30;int n, row, len[N], dp[N][N], rec[N][N];char word[N][L], str[N];void handle(char s[]) {int l = strlen(s);for (int i = 0; s[i]; ) { sscanf(s + i, "%s", word[n]); len[n] = strlen(word[n]); i += len[n++];while (s[i] == ' ') i++; }}void init() {n = 0;sscanf(str, "%d", &row);row++;while (gets(str)) {if (!str[0]) break;handle(str);}}int solve(int x, int y) {if (dp[x][y] > -1) return dp[x][y];if (x == n) {if (y != 0) return INF;else return 0;}int& ans = dp[x][y];int& p = rec[x][y];int begin = y + len[x] + 1, end = row - len[x + 1], t;ans = INF;if (!y) {t = solve(x + 1, 0) + 500;if (t < ans) {ans = t;rec[x][y] = 0;}}if (begin == row) {t = solve(x + 1, 0);if (t < ans) {ans = t;rec[x][y] = 0;}}for (int i = begin; i <= end; i++) {t = solve(x + 1, i) + (i - begin) * (i - begin);if (t < ans) {ans = t;rec[x][y] = i;}}return ans;}void put() {int x = 0, y = 0;row--;while (x < n) {for (int i = 0; i < row;) {if (i == y) {printf("%s", word[x]);i += len[x];y = rec[x][y];x++;}else if (i > y) break;else {printf(" ");i++;}}printf("\n");}/* for (int i = 0, j = 0; i < n; i++) { printf("%s", word[i]); if (rec[i][j] > 0) { int x = sqrt(dp[i][j]-dp[i+1][rec[i][j]]); for (int k = 0; k <= x; k++) printf(" "); } else printf("\n"); j = rec[i][j]; } */}int main () {while (gets(str)) {init();if (row == 1) break;memset(dp, -1, sizeof(dp));solve(0, 0);put();printf("\n");}return 0;}
- UVA 709 Formatting Text(记忆化搜索)
- uva 709 - Formatting Text(记忆化搜索)
- UVA 709 Formatting Text
- UVA - 709 Formatting Text
- uva 709 Formatting Text
- UVa 709 - Formatting Text
- UVA - 709 Formatting Text
- Formatting Text - UVa 709 POJ 1093 dp
- uva 116 (记忆化搜索)
- uva 707 - Robbery(记忆化搜索)
- 记忆化搜索(跳舞机,uva 10618)
- uva 709 &poj 1093 - Formatting Text (dp之小白告一段落)
- uva 10285 记忆化搜索
- uva 707(记忆化搜索)
- uva 607 记忆化搜索
- uva 10118 记忆化搜索
- UVA 10285 记忆化搜索
- UVA 1630 记忆化搜索
- 【Leetcode】Given a binary tree, check whether it is a mirror of itself
- C++四种类型转换
- Hadoop DataNode启动之asyncBlockReport
- ubuntu 10.04.4 安装拼音输入法
- 【数据结构复习】二叉树的遍历——从微软2014校园招聘说起
- uva 709 - Formatting Text(记忆化搜索)
- HDU 3695 Computer Virus on Planet Pandora
- MySQL插入索引太慢,加参数 DELAY_KEY_WRITE
- 堆栈溢出一般是由什么原因导致
- Working Practice-多方位学习
- 文件夹删不掉?有种文件夹叫 畸形文件夹
- javascript生成html
- WIN7 经典“致命错误 C0000034”解决方法
- db file sequential read等待事件