这道题不难
只需明确一件事:
//样例
前四个字符划分成ab/cd和前二个字符划分成ab的方案数是相同的
(有点绕,自己细品)
代码如下:
#include<bits/stdc++.h>
#define int long long
const long long maxn=1e4+10;
using namespace std;
int n;
string a[maxn],s;
int dp[maxn];
bool compare(int x,int y){//纯天然无污染暴力比较
int len=a[y].size();
for(int i=0;i<len;i++){
if(x-i>=0 && len-i-1>=0)
if(a[y][len-i-1] != s[x-i])return 0;
}
return 1;
}
signed main()
{
cin>>n;
for(int i=1;i<=n;i++){
cin>>a[i];
}
cin>>s;
s=" "+s;
int len=s.size()-2;
dp[0]=1;//初始化自行细品
for(int i=1;i<=len;i++){//枚举第i个字符时的情况
for(int j=1;j<=n;j++){
if(!compare(i,j))continue;//比较是否合法
if(i-a[j].size()>=0)dp[i]+=dp[i-a[j].size()];
}
}
cout<<dp[len];
return 0;
}
共 2 条回复
刘明
人类高质量题解(确信