Codevs 4560 NOIP2015 D2T2 子串

> 4560 NOIP2015 D2T2 子串
 時間限制: 1 s
 空間限制: 128000 KB
 題目等級:黃金 Gold
題目描述 Description
有兩個僅包含小寫英文字母的字符串A和B。現在要從字符串A中取出k個互不重疊的非空子串,然后把這k個子串按照其在字符串A中出現的順序依次連接起來得到一個新的字符串,請問有多少種方案可以使得這個新串與字符串B相等?注意:子串取出的位置不同也認為是不同的方案。
輸入描述 Input Description
第一行是三個正整數n,m,k,分別表示字符串A的長度,字符串B的長度,以及問題描述中所提到的k,每兩個整數之間用一個空格隔開。 
第二行包含一個長度為n的字符串,表示字符串A。 第三行包含一個長度為m的字符串,表示字符串B。
輸出描述 Output Description
輸出共一行,包含一個整數,表示所求方案數。由于答案可能很大,所以這里要求輸出答案對1,000,000,007取模的結果。
樣例輸入 Sample Input
【Input1】
6 3 1 
aabaab 
aab
【Input2】
6 3 2 
aabaab 
aab
【Input3】
6 3 3 
aabaab 
aab
樣例輸出 Sample Output
【Output1】
2
【Output2】
7
【Output3】
7
數據范圍及提示 Data Size & Hint
對于第1組數據:1≤n≤5001≤m≤50,k=1; 
對于第2組至第3組數據:1≤n≤5001≤m≤50,k=2; 
對于第4組至第5組數據:1≤n≤5001≤m≤50,k=m; 
對于第1組至第7組數據:1≤n≤5001≤m≤501≤k≤m; 
對于第1組至第9組數據:1≤n≤10001≤m≤1001≤k≤m; 
對于所有10組數據:1≤n≤10001≤m≤2001≤k≤m。
/*
方案數DP+滾動數組優化.
f[i][j][p][]表示A串前i個字符B串前j個字符組成k個貢獻的方案數.
(最后一維對當前字符用不用討論). 
當前考慮兩種狀態:兩個字符相等.兩個字符不等.
關于取模的問題相關:(a+b+c)%p=((a+b)%p+c)%p.
*/
#include<iostream>
#include<cstdio>
#define mod 1000000007
#define MAXN 1001
#define MAXM 201
using namespace std;
int f[2][MAXM][MAXM][2],n,m,k;
char s1[MAXN],s2[MAXM];
int read()
{int x=0,f=1;char ch=getchar();while(ch<'0'||ch>'9') {if(ch=='-')f=-1;ch=getchar();}while(ch>='0'&&ch<='9')x=x*10+ch-48,ch=getchar();return x*f;
}
int main()
{n=read();m=read();k=read();for(int i=1;i<=n;i++)  cin>>s1[i];for(int i=1;i<=m;i++)  cin>>s2[i];f[0][0][0][0]=f[1][0][0][0]=1;for(int i=1;i<=n;i++)for(int j=1;j<=min(i,m);j++)for(int p=1;p<=k;p++){int now=i&1,last=(i-1)&1;if(s1[i]==s2[j]) f[now][j][p][1]=((f[last][j-1][p][1]+f[last][j-1][p-1][0])%mod+f[last][j-1][p-1][1])%mod,f[now][j][p][0]=(f[last][j][p][0]+f[last][j][p][1])%mod;else f[now][j][p][1]=0,f[now][j][p][0]=(f[last][j][p][0]+f[last][j][p][1])%mod;; }printf("%d",(f[n&1][m][k][0]%mod+f[n&1][m][k][1]%mod)%mod);return 0;
}

轉載于:https://www.cnblogs.com/nancheng58/p/6070802.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/256718.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/256718.shtml
英文地址,請注明出處:http://en.pswp.cn/news/256718.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

方差和協方差的數據意義

方差和協方差 定義 方差 度量單個隨機變量的離散程度&#xff0c;公式如下&#xff1a; 協方差 度量兩個隨機變量&#xff08;變化趨勢&#xff09;的相似程度&#xff0c;定義如下&#xff1a;

Git 添加空文件夾的方法

http://stackoverflow.com/questions/115983/how-do-i-add-an-empty-directory-to-a-git-repositoryAnother way to make a directory stay empty (in the repo) is to create a .gitignore inside that directory that contains two lines: 在空目錄下創建.gitignore文件。 文…

《CSS揭秘》學習demo:第三章 形狀

這本書非常實用&#xff0c;我利用這一章所講的技巧自己做了幾個有意思的圖標&#xff0c;每個圖標都只用一個元素實現。 demo地址&#xff1a;http://codepen.io/Tutaizi/pen/akKQXo/轉載于:https://www.cnblogs.com/tuzisxy/p/5715351.html

SAP ABAP規劃 使用LOOP READ TABLE該方法取代雙LOOP內部表的方法

如上&#xff0c;用雙LOOP的方法實現兩個內表匹配篩選性能不高&#xff0c;能夠換成以下LOOP READ TABLE的方法 注意問題&#xff0c;gwa_vbap工作區READ TABLE之前需要排空。 版權聲明&#xff1a;本文博主原創文章。博客&#xff0c;未經同意不得轉載。 轉載于:https://www.c…

memcpy(cv::Mat.data,unsigned char *,320x240),保存數據失真問題解決方法

1、memcpy&#xff08;unsigned char *C&#xff0c;cv::Mat.data A,,320x240)&#xff0c;首先A是圖像完整的&#xff0c;通過copy到C中的時候&#xff0c;再copy到新的cv::Mat 圖像的對象上時&#xff0c;圖像發生失真 memcpy&#xff08;cv::Mat B.data,unsigned char *C,3…

有限元ansys/lsdyna學習筆記-組件component與組元part_02

詳細鏈接&#xff1a;https://wk.baidu.com/view/d24db6db856a561252d36f99?ivk_sa1023194j

centos6.4與win7雙系統時間同步錯誤解決辦法

第一步&#xff1a;編輯/etc/sysconfig/clock文件&#xff0c;在文件末尾添加如下兩行&#xff1a; UTCfalse ARCfalse 第二步&#xff1a;創建軟鏈接&#xff0c;設置centos的時區為上海&#xff1a; ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime 第三步&#xf…

調研Android的開發環境的發展演變

在 知道要做基于移動端的項目實踐時&#xff0c;我就選定了Android&#xff0c;回來的時候查了很多相關的知識&#xff0c;很多人都在問開發安卓軟件&#xff0c;使用eclipse還是用 Android studio&#xff1f;其實&#xff0c;也沒有一個準確的答案&#xff0c;但是可以肯定的…

C++11 多線程庫使用說明

多線程基礎 1.1 進程與線程 根本區別&#xff1a; 進程是操作系統資源分配的基本單位&#xff0c;線程是任務調度和執行的基本單位 開銷方面&#xff1a; 每個進程都有自己獨立的代碼和數據空間&#xff0c;程序之間的切換開銷較大。 線程可以看作是輕量級的進程&#xff0c;同…

005 vim程序編輯器

1. 為何要學 vim 所有的 Unix Like 系統都會內建 vi 文本編輯器&#xff0c;其他的文書編輯器則不一定會存在&#xff1b;很多個別軟件的編輯接口都會主動呼叫 vi (例如未來會談到的 crontab, visudo, edquota 等指令)&#xff1b;vim 具有程序編輯的能力&#xff0c;可以主動…

Redis 實踐筆記1---基礎知識

前言 由于Redis的廣泛使用&#xff0c;加上在項目中涉及到Redis&#xff0c;因此會根據自己的使用和學習&#xff0c;寫一個Redis系列的博客&#xff0c;作為自己的筆記&#xff0c;同時也分享給大家。 What is Redis ? 看一下Redis的官網http://redis.io/對REDIS的描述&#…

[操作系統實驗lab4]實驗報告

實驗概況 在開始實驗之前&#xff0c;先對實驗整體有個大概的了解&#xff0c;這樣能讓我們更好地進行實驗。 我們本次實驗需要補充的內容包括一整套以sys開頭的系統調用函數&#xff0c;其中包括了進程間通信需要的一些系統調用如sys_ipc_can_recv等&#xff0c;以及補充完成f…

設計模式C++實踐

1、單例模式 1&#xff09;餓漢士單例模式 2&#xff09;懶漢士單例模式

js中怎么寫自執行函數

<!DOCTYPE html><html lang"en"><head> <meta charset"UTF-8"> <title></title> <script type"text/javascript"> /** * Window 是一個非常重要的對象 */ c…

最優化課堂筆記06-無約束多維非線性規劃方法(含重點)

引言 6.1 坐標輪換法&#xff08;工程上基本不用&#xff0c;效率低不適用高維&#xff09; 6.1例子&#xff1a;主要是對最優步長alpha的確定 6.2 最速下降法&#xff08;相鄰兩次的搜索方向互相垂直&#xff09; 6.2例子 求解法一 注&#xff1a;最速下降法與坐標輪換法的區…

WINHEX的比較、同步功能加上NTFS對稀疏文件的支持

[原創]如何快速地分析RAID信息在每塊盤上的記錄方式&#xff0c;如何快速地確定系統的實質讀寫操作。WINHEX是一個非常好的軟件&#xff0c;通過其比較和同步功能加上NTFS對稀疏文件的支持&#xff0c;看看怎么實現上述設想。。。我們會有這樣的需求&#xff1a;在RAID上的幾塊…

Z表數據EXCEL導入

很多項目都有這種需求&#xff0c;雖然別人用的各有不同&#xff0c;不過閑來無事&#xff0c;還是自己搞了一個出來。基于EXCEL的導入。 *&---------------------------------------------------------------------* *& Report ZLY_UPLOAD_TABLE *& *&------…

運動軌跡規劃算法專欄

1、全局局部路徑規劃&#xff0c;解決低速簡單障礙物環境的路徑規劃功能