做网站的软件word,ppt内容素材大全免费,高端电商设计公司,网站建设审批我是抄题解狂魔 /*
1.s.substr(x,len) 在s中取出从x位置开始#xff0c;长度为len的字符串#xff0c;并返回string类型的字符串。 2.s.find(a) 在s中查找字符串a,并返回起始下标#xff08;从0开始#xff09;#xff0c;若不存在#xff0c;返回1844674407370955161长度为len的字符串并返回string类型的字符串。 2.s.find(a) 在s中查找字符串a,并返回起始下标从0开始若不存在返回1844674407370955161即199999999999999916.3.s.length() 求s的长度从0开始。 4.s[1] 字符串s的第2个字符相当于数组后来因为有了substr就不用了。 然后是DPdp[i][j]表示到了第i个位置分了j块能得到的最多的单词数。 转移枚举断点l则 dp[i][j]max{ dp[i][j] , dp[l][j-1]sum[l1][i] };sum[i][j] 是预处理的表示从i到j的单词数
*/
#includeiostream
#includecstdio
#includecstring
using namespace std;
int p,n,m,k,dp[210][50],sum[210][210];
string s,a[10];
bool check(int l,int r)
{string xs.substr(l,r-l1);for(int i1;in;i)if(x.find(a[i])0) return true;return false;
}
void init()
{string ch;s0;scanf(%d%d,p,k);for(int i1;ip;i){cinch;sch;}scanf(%d,n);ms.length()-1;for(int i1;in;i)cina[i];for(int im;i1;i--)for(int ji;j1;j--){sum[j][i]sum[j1][i];if(check(j,i)) sum[j][i];}
}
void work()
{dp[0][0]0;for(int i1;ik;i)//dp[i][i]dp[i-1][i-1]sum[i][i];//for(int i1;im;i)//dp[i][1]sum[1][i];//for(int i1;im;i)for(int j1;jkji;j)//for(int lj;li;l)//不太明白的地方dp[i][j]max(dp[i][j],dp[l][j-1]sum[l1][i]);printf(%d\n,dp[m][k]);
}
int main()
{init();work();return 0;
} 转载于:https://www.cnblogs.com/karryW/p/10914633.html