题目大意
给你一个字符串和若干单词,问你最少删除多少字符使其成为若干单词连在一起的字符串
解题思路
设fif_ifi为前i个位置的最小代价
然后枚举每个单词即可
代码
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#define ll long long
using namespace std;
int n, m, g, v, l[610], f[610];
char ss[310], s[610][30];
int main()
{scanf("%d%d", &n, &m);scanf("%s", ss+1);for (int i = 1; i <= n; ++i){scanf("%s", s[i]+1);l[i] = strlen(s[i]+1);}memset(f, 127/3, sizeof(f));f[0] = 0;for (int i = 1; i <= m; ++i){f[i] = f[i - 1] + 1;//直接删掉for (int j = 1; j <= n; ++j){g = l[j];v = i;while(v && g)//找单词{if (ss[v] == s[j][g]) g--;v--;}if (!g) f[i] = min(f[i], f[v] + i - v - l[j]);//求最小值}}printf("%d", f[m]);return 0;
}