当前位置: 首页 > news >正文

动态规划(2)

动态规划(2)

文章目录

  • 动态规划(2)
    • 1、聪明的寻宝人
    • 2、基因检测
    • 3、药剂稀释
    • 4、找相似串

1、聪明的寻宝人

#include <iostream>
using namespace std;
void MaxValue(int values[], int weights[], int n, int m) {int dp[21][51] = {0};for (int i = 1; i <= n; ++i) {for (int j = 1; j <= m; ++j) {if (weights[i - 1] <= j) {dp[i][j] = max(dp[i - 1][j], dp[i - 1][j - weights[i - 1]] + values[i - 1]);} else {dp[i][j] = dp[i - 1][j];}}}cout << dp[n][m] << endl;

2、基因检测

#include <iostream>
#include <algorithm>
#include <cstring>
#include <string>
using namespace std;void Similar(char *str1, char *str2) {int m = strlen(str1);int n = strlen(str2);int dp[51][51] = {0};int maxLen = 0;for (int i = 1; i <= m; ++i) {for (int j = 1; j <= n; ++j) {if (str1[i - 1] == str2[j - 1]) {dp[i][j] = dp[i - 1][j - 1] + 1;maxLen = max(maxLen, dp[i][j]);} else {dp[i][j] = 0; }}}cout << maxLen ;
}

3、药剂稀释

#include <algorithm>
using namespace std;void Cal(double arr[],int n)
{/**********   Begin   **********///补充代码完成任务int dp[n];for(int i=0;i<n;i++) dp[i]=1;for(int i=n-2;i>=0;i--){for(int j=i+1;j<n;j++){if(arr[i]>=arr[j]) dp[i]=dp[i]<(dp[j]+1)?(dp[j]+1):dp[i];}}int max=1;for(int i=0;i<n;i++){if(max<dp[i]) max=dp[i];}printf("%d",max);/**********   End   **********/
}

4、找相似串

#include <iostream>
#include <cstring>
using namespace std;
const int MAX=60;
void Similar()
{/**********   Begin   **********/char s[MAX];int n,end;cin >> s>>n;//读取主串和子串个数int len_s = strlen(s);char arr[20][MAX];int caozuo[20];//存操作次数int dp[MAX][MAX];//用数组dp[i][j]表示,子串从1-i转换到主串的操作数。for (int i = 0; i < n; i++)//读取子串{cin>>arr[i];}	for (int i = 0; i < len_s; i++){dp[0][i] = i;  //处理边界}for (int k = 0; k < n; k++)//第k个子串{int len = strlen(arr[k]);//子串长度//初始化for (int j = 0; j < len; j++)dp[j][0] = j;for (int i = 1; i < len_s; i++)//i为主串下标{for (int j = 1; j < len; j++)//j为子串下标{if (s[i] == arr[k][j])dp[i][j] = dp[i - 1][j - 1];elsedp[i][j] = min(dp[i - 1][j], dp[i][j - 1]) + 1;}}caozuo[k] = dp[len_s-1][len-1];//存每个子串的最小操作数}end = caozuo[0];for (int i = 1; i < n; i++)end = min(end, caozuo[i]);  //找到最小操作数for (int i = 0; i < n; i++){if (caozuo[i] == end)cout << arr[i] << endl;  //输出对应串}/**********   End   **********/
}
http://www.lryc.cn/news/333979.html

相关文章:

  • JetBrains IDE 2024.1 发布 - 开发者工具
  • C++ 构造函数中的参数顺序
  • Git Flow困境逃脱指南
  • MySQL的sql_mode模式简介
  • 性能优化-如何爽玩多线程来开发
  • 非关系型数据库-----------Redis的主从复制、哨兵模式
  • 使用docx4j转换word为pdf处理中文乱码问题
  • 【引子】C++从介绍到HelloWorld
  • Django检测到会话cookie中缺少HttpOnly属性手工复现
  • 2024数字城市建设博览会:一站式平台,满足多元需求
  • iOS 17.5系统或可识别并禁用未知跟踪器,苹果Find My技术应用越来越合理
  • 关于搭建elk日志平台
  • 【全套源码教程】基于SpringBoot+MyBatis+Vue的流浪动物救助网站的设计与实现
  • Word wrap在计算机代表的含义(自动换行)
  • 室友打团太吵?一条命令让它卡死
  • RabbitMQ3.13.x之八_RabbitMQ中数据文件和目录位置
  • 仿抖音短视频直播带货刷一刷商城社交电商源码系统小程序APP开发
  • Vue - 你知道Vue组件中的data为什么是一个函数吗
  • MUX VLAN
  • 漫谈:“标准”是一种幻觉 C++语言标准的意义
  • 【Wbpack原理】基础流程解析,实现 mini-webpack
  • Debian 安装 python 3.9.6
  • 搜索二维矩阵2 合并两个有序链表
  • 深入Tauri开发——从环境搭建到项目构建
  • Redis 和 Mysql 数据库数据如何保持一致性
  • 探索7个MAMP本地开发环境的高效替代软件
  • 靡语IT:Bootstrap 简介
  • 亚马逊店铺引流:海外云手机的利用方法
  • 10 Python进阶:MongoDB
  • Leetcode 142. 环形链表 II和Leetcode 242. 有效的字母异位词