在更新后的giao级青藤的第一篇题解

071maozihan 2022-04-03 10:07:09 2022-04-03 18:51:03 38 返回题目

这道题不难

只需明确一件事:

//样例

前四个字符划分成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;

}
{{ vote && vote.total.up }}

共 2 条回复

wuhongzhen

刘明

wuhongzhen

人类高质量题解(确信