bill試圖通過摺疊其中的重複子序列來緊湊地表示從「a」到「z」的大寫字母字串行。
例如,表示序列aaaaaaaaaabababccd的一種方法是10(a)2(ba)b2(c)d。他通過以下方式正式定義了摺疊的字串行以及它們的展開變換: 包含從「a」到「z」的單個字元的序列被認為是摺疊序列。展開此序列會產生單個字元本身的相同序列。 如果s和q是摺疊序列,則sq也是摺疊序列。如果s展開到s』並且q展開到q』,則sq展開到s』q』。
如果s是摺疊序列,則x(s)也是摺疊序列,其中x是大於1的整數的十進位制表示。如果s展開到s』,則x(s)展開到s』重複x倍。
根據這個定義,很容易展開任何給定的摺疊序列。但是,比爾對逆向轉型更感興趣。他希望摺疊給定的序列,使得得到的摺疊序列包含盡可能少的字元數。
我們設f[i
][j]
f[i][j]
f[i][j
]表示[i,
j]
[i,j]
[i,j
]的最小字元數,設g[i
][j]
g[i][j]
g[i][j
]表示[i,
j]
[i,j]
[i,j
]的反感。
顯然對於區間[i,
j]
[i,j]
[i,j
]的答案,一定分為兩部分:
這道題對我們的啟示就是dp輸出反感不一定要做完以後再遞迴查詢,當答案序列不大時可以邊做邊記錄。
**如下:
#include
using
namespace std;
const
int n =
200;
char a[n]
;string g[n]
[n], t[n]
[n];
int f[n]
[n], c[n]
[n], pre[n]
[n], n;
intfind
(int l,
int r)
if(flag ==1)
return l;
}return0;
}//尋找最小迴圈節
string str
(int x)
intmain
(void
)for
(int len=
2;len<=n;
++len)
for(
int i=
1;i<=n-len+1;
++i)
cout<[n]
}
選課 樹形dp 輸出方案
更新提示 第一次更新 這道題的樹上分組揹包的做法已經在 選課 有樹形依賴的揹包問題 中講過了,本篇部落格中主要講解將多叉樹轉二叉樹的做法,以便輸出方案。正文 學校實行學分制。每門的必修課都有固定的學分,同時還必須獲得相應的選修課程學分。學校開設了n n 500 門的選修課程,每個學生可選課程的數量m...
Ruby的輸出方法
print hello world.n 下劃線部分被稱為string物件或者字串物件,也可以直接稱這部分為字串。資料在程式中表現為物件。在ruby中,字串 數值 時間等各種資料都是物件。注 n是換行符,與大多數語言一樣。print是乙個方法。所謂方法就是物件的行為。print方法的作用就是輸出 裡的...
PHP的幾種輸出方式
請寫出echo print r print var dump die之間的區別 echo 只能輸出字串等單一資料 不能輸出資料型別 不能輸出陣列等多種資料 print 只能輸出字串等單一資料 不能輸出資料型別 不能輸出陣列等多種資料有返回值true false print r 既能輸出字串等單一資料...