动态规划(2)

动态规划(2)

文章目录

1、聪明的寻宝人

c 复制代码
#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、基因检测

c 复制代码
#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、药剂稀释

c 复制代码
#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、找相似串

c 复制代码
#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];
				else
					dp[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   **********/
}
相关推荐
Coovally AI模型快速验证18 分钟前
农田扫描提速37%!基于检测置信度的无人机“智能抽查”路径规划,Coovally一键加速模型落地
深度学习·算法·yolo·计算机视觉·transformer·无人机
pusue_the_sun22 分钟前
数据结构:二叉树oj练习
c语言·数据结构·算法·二叉树
RaymondZhao341 小时前
【全面推导】策略梯度算法:公式、偏差方差与进化
人工智能·深度学习·算法·机器学习·chatgpt
zhangfeng11331 小时前
DBSCAN算法详解和参数优化,基于密度的空间聚类算法,特别擅长处理不规则形状的聚类和噪声数据
算法·机器学习·聚类
啊阿狸不会拉杆2 小时前
《算法导论》第 32 章 - 字符串匹配
开发语言·c++·算法
小学生的信奥之路2 小时前
洛谷P3817题解:贪心算法解决糖果分配问题
c++·算法·贪心算法
你知道网上冲浪吗3 小时前
【原创理论】Stochastic Coupled Dyadic System (SCDS):一个用于两性关系动力学建模的随机耦合系统框架
python·算法·数学建模·数值分析
地平线开发者5 小时前
征程 6 | PTQ 精度调优辅助代码,总有你用得上的
算法·自动驾驶
Tisfy5 小时前
LeetCode 837.新 21 点:动态规划+滑动窗口
数学·算法·leetcode·动态规划·dp·滑动窗口·概率
CoovallyAIHub6 小时前
为高空安全上双保险!无人机AI护航,YOLOv5秒判安全带,守护施工生命线
深度学习·算法·计算机视觉