5002 排版問題

2021-09-29 18:57:19 字數 2463 閱讀 3222

time limit: 3 second

memory limit: 2 mb

【問題描述】

寫電子郵件是有趣的,但不幸的是經常寫不好看,主要是因為所有的行不一樣長,你的上司想要發排版精美的
電子郵件,你的任務是為他編寫乙個電子郵件排版程式。

完成這個任務最簡單的辦法是在太短的行中的單詞之間插入空格,但這並不是最好的方法,考慮如下例子:

******************(這裡的28個*表示要達到的行寬)

this is the example you are

actually considering.

假設我們想將這兩行按行寬兩端對齊,靠簡單地插入空格則我們將得到如下結果:

this is the example you are

actually considering.

但這太難看了,因為在第二行中有乙個非常大的空白,如果將第一行的單詞「are」移到下一行我們將得到較好的結果:

this is the example you

are actually considering.

當然,這必須對難看程度進行量化。因此我們必須給出單詞之間的空格的難看程度,乙個包含n個空格符的空白

處,其難看程度值為(n-1)2,程式的目的是使難看程度的總和最小化。例如,第乙個例子的難看程度是1+72=50,而

第二個例子的難看程度僅為1+1+1+4+1+4=12。

輸出時,每一行的開頭和結尾處都必須是乙個單詞,即每行開頭和結尾處不能有空白。唯一例外的是該行僅有一

個單詞組成的情況,對於這種情況你可將單詞放在該行開頭處輸出,此時如果該單詞比該行應有的長度短則我們指定

它的最壞程度為500,當然在這種情況下,該行的實際長度即為該單詞的長度。

【輸入】

第一行是乙個整數n,表示該段要求達到的行寬度,1<=n<=80。

第二行起為文章內容,該段文章由乙個或多個單詞組成,單詞由ascii碼值為33到126(包含33和126)的字元組成,

單詞與單詞之間用空格隔開(空格的ascii碼是32,可能超過乙個)。單詞長度不會超過段落要求達到的寬度。一段文字

所有單詞的總長度不會超過10000個字元,任何一行都不會超過100個字元,任何乙個單詞都在同一行內。

文章若從鍵盤輸入,按」f6」鍵或」ctrl+z」鍵結束,導致eof()為真。

【輸出】

對於輸入的文章段落,找出使其難看程度最小的排版形式並輸出句子:「minimal badness is b.」,b是指按可能
的最好排版形式會發生的難看程度值。注意排版後文字行數任意,多餘的空格或其他控制符號也可刪除。

【輸入樣例】

28 this is the example you are

actually considering.

【輸出樣例】

minimal badness is 12.

【題目鏈結】:

【題解】

可以把中間的那些空格去掉;直接獲取所有的單詞;存在乙個vector裡面

設f[i]表示以第i個單詞當做一行的最後乙個單詞的最少難看程度;

分兩種轉移方式:

1.把第i個單詞放在新的一行。題目有說如果這個單詞小於需要的長度,則難看程度為500;

2.把第k到第i個單詞放在新的一行;

那麼問題在於怎麼讓k到i這些單詞放在一行形成的難看程度最小?

必然是讓每兩個單詞之間的空格平均分;即用n減去從k到i這些單詞的總長度;設差為rest;則這rest個位置就是要用來加空格的。那麼就盡量平方這些空格;

搞個g[i][j]表示從第i到第j個單詞放在同一行且這一行只有這些單詞時最小難看程度;用遞迴搞出g(i,j)就好;用遞迴搞,並不是真的乙個陣列;

再具體一點

f[0] = 0;

for (i=1 -> n)

}

【完整**】

#include 

#include

#include

using

namespace

std;

const

int maxn = 1e4+10;

char s[100];

int n,f[maxn],sum[maxn];

vector

a;int sqr(int x)

int g(int l,int r)

}int main()

int len = a.size()-1;

f[0] = 0;

for (int i = 1;i <= len;i++)

}printf("minimal badness is %d.\n",f[len]);

return

0;}

Bootstrap學習7 排版

頁面主體 bootstrap 全域性 font size 設定為 14px,line height 設定為 1.428。這些屬性直接賦予 元素和所有段落元素。另外,段落 元素還被設定了等於 1 2 行高 即 10px 的底部外邊距 margin 預設行高20px lead類 中心內容 突出顯示 使用...

HTML4 排版標記

段落 哈哈哈哈哈哈 屬性 align left 左對齊 align right 右對齊 align center 居中對齊 換行文字不換行 實體 1最大,6最小 會自動換行,插入乙個空行 屬性 align left 左對齊 align right 右對齊 align center 居中對齊 size...

HTML學習3 排版標記

上節,我們學習了boda常用的屬性以及html的一些標記,但是圖顯示的效果卻不是那麼的好看。原因就是沒有排版好,我們這次使用居中來使這個頁面更好看一點,順便多加入幾個別的標記。html排版標記 1 表示乙個段落。一段文字放在p標記裡就可以了。常用屬性 align 水平對齊方式,取值 left 左對齊...