• 动态规划


    1.求最长公共子串

    #pragma once
    
    #pragma once
    
    #include <random>
    #include <iostream>
    #include <tchar.h>
    #include <bitset>
    #include <cassert>
    #include <crtdbg.h>
    using namespace std;
    
    //-----------------------------------------------
    //a:97 z:122 A:65 Z:90
    //生成随机字符串
    //-----------------------------------------------
    void CreateStr(string& str,int len)
    {
        random_device rv;
        char* buffer = new char(len);
        assert(sizeof(buffer) > 0);
        for (int i = 0; i < len; ++i) {
            int ascii = 0;
            if (rv() % 2) {
                ascii = rv() % 25 + 97;
            } else { //大写
                ascii = rv() % 25 + 65; 
            }
            buffer[i] = ascii;
        }
        buffer[len] = '\0';
        str = buffer;
        cout<<"随机生成字符串:"<<endl;
        cout<<str<<endl;
    }
    
    void LCS(string stra,string strb,int lena,int lenb)
    {
        string str;
        int** array;
        array = new int*[lena];
        for (int i = 0; i < lena; ++i) {
            array[i] = new int[lenb];
        }
        array[0][0] = 0;
        for (int i = 0; i < lena; ++i) {
            array[i][0] = 0;
        }
    
        for (int j = 0; j < lenb; ++j) {
            array[0][j] = 0;
        }
    
        for (int i = 1; i < lena; ++i) {
            for (int j = 1; j < lenb; ++j) {
                if (stra[i] == strb[j]) {
                    //str += stra[i];
                    array[i][j] = array[i-1][j-1] + 1;
                    if (str.length() < array[i][j]) {
                        str += stra[i];
                    }
                } else {
                    array[i][j] = (array[i][j-1] > array[i-1][j]) ? array[i][j-1] : array[i-1][j];
                }
            }
        }
        cout<<str<<endl;
        cout<<array[lena-1][lenb-1]<<endl;
        for (int i = 0; i < lena; ++i) {
            delete [] array[i];
        }
        delete [] array;
    }
    
    
    int _tmain(int argc,TCHAR* argv[])
    {
        do {
            int in = 0;
            cin>>in;
            if (!in) {
                break;
            }
            string strA;
            string strB;
            CreateStr(strA,20);
            CreateStr(strB,14);
            LCS(strA,strB,20,14);
        } while (true);
        
        return 0;
    }

    2.管子切割问题

    3.矩阵乘法

    4.背包问题

  • 相关阅读:
    Jenkins+SVN+Maven自动化部署环境搭建
    基于Maven+SSM整合shiro+Redis实现后台管理项目
    Linux学习之CentOS(一)----在VMware虚拟机中安装CentOS 7
    如何用Jmeter做压力测试
    项目沟通管理中的几种技巧
    软件生命周期管理(ALM)
    大数据入门-记录
    为啥项目做到最后都成为了“屎山”,代码改不动
    看企业如何玩转低代码,引发效率革命
    行云创新亮相云栖大会,解读云原生时代开发者工具变革探索与实践
  • 原文地址:https://www.cnblogs.com/fripside/p/2928495.html
Copyright © 2020-2023  润新知