f[i][j][p][0/1]表示b前j個字元由a的前i個字元分成p段,且a[i]選或不選的方案數.
(1)當前a[i-1]可以不選 f[i-1][j-1][p-1][0]
(2)當前a[i]與a[i-1]在同一段上 f[i-1][j-1][p][1]
(3)當前a[i]與a[i-1]不在同一段上 f[i-1][j-1][p-1][1]
(1)a[i-1]選 f[i-1][j][p][1]
(2)a[i-1]不選 f[i-1][j][p][0]
好了,這道題的思路就是這樣了,但是還有一點需要注意,如果直接寫上面的方程的話,會mle,然後又發現可以壓一維,然後就ac了.
//別忘了初始化.
還有最重要的一點:**第3行的三個人排名不分先後!!!!
先貼一下思路中的未經優化的**,便於理解:
1 #include2 #include3mle+沒有處理細節4using
namespace
std;56
string
a,b;
7int n,m,w,f[1001][201][201][2];8
9int
main()
21else25}
26 printf("
%d",f[n][m][w][1] + f[n][m][w][0
]);27
return0;
28 }
1 #include2 #include3//noip2015提高 day2 t2#define yyq_ljx_xhy 10000000074//
排名不分先後,都可以吊打本蒟蒻
5using
namespace
std;67
string
a,b;
8int n,m,w,f[2][201][201][2
],p;910
intmain()
22else26}
27 printf("
%d",(f[p^1][m][w][1] + f[p^1][m][w][0]) %yyq_ljx_xhy);
28return0;
29 }
洛谷 P2679子串
題目背景 無 題目描述 有兩個僅包含小寫英文本母的字串 a 和 b。現在要從字串 a 中取出 k 個互不重疊的非空子串,然後把這 k 個子串按照其在字串 a 中出現的順序依次連線起來得到一 個新的字串,請問有多少種方案可以使得這個新串與字串 b 相等?注意 子串取出 的位置不同也認為是不同的方案。輸...
題解 P2679 子串
傳送門 對於這道題,有好多大佬發了題解,狀態轉移方程也都一樣,但是那些大佬們都是只給個狀態轉移方程,以至於我這個蒟蒻很難搞懂什麼意思,所以發篇題解說下自己的理解 f i j k 0 qquad qquad qquad qquad qquad qquad qquad qquad qquad qquad...
洛谷P2679 NOIP2015 子串
無 有兩個僅包含小寫英文本母的字串 a 和 b。現在要從字串 a 中取出 k 個互不重疊的非空子串,然後把這 k 個子串按照其在字串 a 中出現的順序依次連線起來得到一 個新的字串,請問有多少種方案可以使得這個新串與字串 b 相等?注意 子串取出 的位置不同也認為是不同的方案。輸入格式 輸入檔名為 ...