我們稱兩個字串是相似的,當且僅當它們的成分相同,並且組成各成分出現的數目相同。例如字串"abbcdf"與字串"bcfdab"就是相似的,而"abbcdf"與"abcdf"不相似,因為它們雖然成分相同,但是各成分出現的次數不同。
牛牛本來有兩個長度均為n的01字串s,t,但是t串由於資料損壞,導致一些位置不確定到底是0還是1,不過好在,牛牛清楚的記得t串中有\(cnt_\)個0, \(cnt_\)個1
接下來牛牛要還原損壞的t串。
s串和t串每存在乙個非空相似字首得分\(val_\), 每存在乙個非空相似字尾得分\(val_\)
想要知道它能夠還原的t串中的最小得分與最大得分。
第一行輸入五個整數n \(cnt_\)
\(cnt_\)
\(val_\)
\(val\)
接下來輸入兩行表示字串s,t,|s|=|t|=n, n<= 100
其中,s串完全由'0','1'組成,t串完全由'0','1','?'組成。
?表示損壞的部分,也就是需要你還原的部分。
輸入資料保證至少存在一種合法的方案。
請輸出兩個整數,表示還原後的最小得分與最高得分。
8 6 2 1 1
10110011
????????
0 4
可以構造01串t="00011000"達到最小得分(與s串沒有相似的字首與字尾)可以構造01串t="00000011"(4個相似的字尾)達到最大得分。
20 1 19 55 97
11111010101111111111
1?????1?1?1????????1
566 1439
最小:"11111111111111111101"最大:"11111111101111111111"
1 0 1 -999 1000
0?
0 0
因為限制條件為必須有1個1,所以?處只能填1本題給定了0和1的數量,讓你如何排列才能使分數最優。
我們先考慮問題的簡單版本,如果給定字串t全為問號,即對組成的字串不加限制,就轉變經典傳紙條問題,
即只求一條從(0,0)到(cnt0,cnt1)的路徑,只能向右或向下走,使得路徑上的點的權值和最大。
顯而易見的變化中的量就是座標(x,y),用dp[x][y]來表示傳到(x,y)這個座標的時候,最大(小)的權值和
就是普通的傳紙條模型
但是有的位置給定了你方向(t[i] != '?'), 分四種情況就行
傳統傳紙條是
for (int step = 1; step <= n; ++step)
for (int i = 0; i <= a; ++i)
但是注意到後效性
也可以直接二維列舉
#include#define rep(i,a,b) for(int i=a;i<=b;++i)
using namespace std;
const int maxn = 1e3 + 5;
int n, a, b, x, y;
int sum[maxn << 1], f1[maxn][maxn], f2[maxn][maxn];
string s,t;
int main()
if (t[pos] != '1' && i)
}cout << f2[a][b] << " " << f1[a][b] << endl;
return 0;
}
牛客 牛牛的01限定串
對於乙個長度為n的字串s,我們稱字串s0s1s2 si為字串的乙個字首,稱字串si 1si 2 sn為字串的乙個字尾。我們稱兩個字串是相似的,當且僅當它們的成分相同,並且組成各成分出現的數目相同。例如字串 abbcdf 與字串 bcfdab 就是相似的,而 abbcdf 與 abcdf 不相似,因為...
洛谷P1006 NOIP提高組2008 傳紙條
小淵和小軒是好朋友也是同班同學,他們在一起總有談不完的話題。一次素質拓展活動中,班上同學安排做成乙個m行n 列的矩陣,而小淵和小軒被安排在矩陣對角線的兩端,因此,他們就無法直接交談了。幸運的是,他們可以通過傳紙條來進行交流。紙條要經由許多同學傳到對方手 裡,小淵坐在矩陣的左上角,座標 1,1 小軒坐...
01串 動態規劃
時間限制 1000 ms 記憶體限制 65535 kb難度 2 描述 acm的zyc在研究01串,他知道某一01串的長度,但他想知道不含有 11 子串的這種長度的01串共有多少個,他希望你能幫幫他。注 01串的長度為2時,有3種 00,01,10。輸入 第一行有乙個整數n 0 輸出輸出不含有 11 ...