Problem’s Website
- 统计单词个数
Solution
- 这是一道关于字符串和dp的题目
首先要把题意读明白,下面是样例解释
1
2
3
4
5
6
7
8this/isabookyoua/reaoh
1:is(this)
2:is(isabookyoua)
3:sab(isabookyoua)
4:a(isabookyoua)
5:ok(isabookyoua)
6:a(isabookyoua)
7:a(reaoh)题意搞懂后,我们来想正解,本题的状态不难想出,设f[i][j]为长度为i的字符串分成j块包含的单词个数,答案为f[len][k],经过思考,发现状态转移只有一个f数组还不够,于是我们再维护一个sum数组,sum[i][j]表示从i到j的单词个数,维护这个数组需要用到STL:string类型的find()函数和substr()函数,不懂的可以点击对应名称进行学习。状态转移比较好理解,枚举字符串长度和分割的块数,然后枚举断点,方程为
1
f[i][j] = max(f[i][j], f[l][j - 1] + sum[l + 1][i];
Code
1 |
|
rp++