algorithm - 有多少个长度为 n 的单词最多有 k 个连续的元音?

标签 algorithm dynamic-programming permutation combinatorics

有多少个长度为 n 的单词最多有 k 个连续的元音?

我们的字母表有 21 个辅音字母和 5 个元音字母。

请原谅我没有提供测试用例。我没有测试用例,因为这是给 friend 的电话面试问题。

我从早上开始就在解决这个问题,您的小小帮助可以挽救我的生命。 我知道问题陈述含糊不清,但如果您能提供一些关于此动态编程模式的提示。

我发现由于它是计数问题,我们可以做这样的事情 dp[i][j] = length of word i with j consecutive vowel 。 我不知道如何进一步进行。请帮助重现!

最佳答案

这是一个有效的动态规划实现:

#include <iostream>
#include <string.h>
using namespace std;

#define n 5
#define k 2

int arr[n][k + 1];

int fill(int index, int currK){
    if(arr[n][currK] != 0) return arr[n][currK];  //if already calculated
    if(index == n - 1) {                          //base case
        arr[index][currK] = 21 + (currK ? 5 : 0);
        return arr[index][currK];
    }
    
    //recursive condition and step
    if(currK == 0) arr[n][currK] = 21 * fill(index + 1, k);
    else arr[n][currK] = 5 * fill(index + 1, currK - 1) + 21 * fill(index + 1, k);
    return arr[n][currK];   
}

int main(){
    memset(arr, 0, sizeof(arr));
    cout<<fill(0, k)<<endl;

    return 0;
}

想法是有一个 matrix[n][k + 1],其中 matrix[i][j] 存储一个单词大小 i 您使用了 k - j 连续元音的地方。

关于algorithm - 有多少个长度为 n 的单词最多有 k 个连续的元音?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62816143/

相关文章:

c++ - 计算 5*n 板的正确配置(动态编程,C++)

c++ - 为什么内存比制表花费更多时间?

algorithm - Prolog 有条件的排列?

algorithm - 从数组中选取随机数

algorithm - 每种算法的最佳时间复杂度要求?

c# - 3D 体素网格视线 Bresenham 算法

xml - 创建按站点许可证(算法)

string - 确定字符串是否包含字符的最快方法

c++ - 重复排列的排名和取消排名

algorithm - 基于动态规划之字形拼图