算法回忆录(3)

11. 假设有7个物品,它们的重量和价值如下表所示。若这些物品均不能被分割,且背包容量M=150设计算法求解怎么装才能使得获取的价值最大请写出伪代码。     

#include <stdio.h>#define MAX_ITEMS 100
#define MAX_WEIGHT 1000int max(int a, int b) {return (a > b) ? a : b;
}// 动态规划求解背包问题
void knapsack(int n, int capacity, int weights[], int values[]) {int dp[MAX_ITEMS + 1][MAX_WEIGHT + 1] = {0};int i, w;// 填表格for (i = 1; i <= n; i++) {for (w = 1; w <= capacity; w++) {if (weights[i - 1] > w) {dp[i][w] = dp[i - 1][w];} else {dp[i][w] = max(dp[i - 1][w], values[i - 1] + dp[i - 1][w - weights[i - 1]]);}}}// 回溯找出装入背包的物品int res[MAX_ITEMS];int k = n, c = capacity;int num = 0;while (k > 0 && c > 0) {if (dp[k][c] != dp[k - 1][c]) {res[num++] = k;c -= weights[k - 1];}k--;}// 输出结果for (i = num - 1; i >= 0; i--) {printf("%-d ", res[i]);}printf("\n");printf("end");
}int main() {int n, capacity;scanf("%d %d", &n, &capacity);int weights[MAX_ITEMS], values[MAX_ITEMS];for (int i = 0; i < n; i++) {scanf("%d", &weights[i]);}for (int i = 0; i < n; i++) {scanf("%d", &values[i]);}// 调用背包问题求解函数knapsack(n, capacity, weights, values);return 0;
}

 运行结果:

12. 假设你正在爬楼梯。需要 n 阶你才能到达楼顶。 每次你可以爬 1 或 2 或 3 个台阶。你有多少种不同的方法可以爬到楼顶呢?请用动态规划算法解决并写出伪代码。(n需要在算法中输入)

#include <stdio.h>int climbStairs(int n) 
{int dp[n];dp[0] = 1;dp[1] = 1;dp[2] = 2;for (int i = 3; i <= n; i++){dp[i] = dp[i-1] + dp[i-2]+dp[i-3];}return dp[n];
}int main(){int n ;scanf("%d",&n);int result = climbStairs(n);printf("%d\n", result); // 输出结果return 0;
}

运行结果:

13.最长公共子序列是指两个序列共同拥有的最长的子序列,这个子序列在两个序列中的位置不必连续,但必须保持原有的顺序。例如,对于序列X=ABCBDAB”和序列Y=BDCABA”,它们的最长公共子序列为“BCBA”,长度为4。编程输入两个字符串,求其最长公共子序列的长度。

#include <stdio.h>  
#include <string.h>  // 函数声明  
int longestCommonSubsequence(char *X, char *Y);  int main() {  char X[100], Y[100];  // 输入两个字符串  printf("Enter the first string: ");  scanf("%99s", X); // 使用%99s限制输入长度,避免溢出  printf("Enter the second string: ");  scanf("%99s", Y);  // 调用函数计算LCS长度  int length = longestCommonSubsequence(X, Y);  // 输出LCS长度  printf("The length of the Longest Common Subsequence is: %d\n", length);  return 0;  
}  // 函数定义:计算两个字符串的最长公共子序列的长度  
int longestCommonSubsequence(char *X, char *Y) {  int m = strlen(X);  int n = strlen(Y);  // 创建一个二维数组dp,用于存储子问题的解  int dp[m + 1][n + 1];  // 初始化dp数组  for (int i = 0; i <= m; i++) {  for (int j = 0; j <= n; j++) {  if (i == 0 || j == 0) {  dp[i][j] = 0;  }  }  }  // 填充dp数组  for (int i = 1; i <= m; i++) {  for (int j = 1; j <= n; j++) {  if (X[i - 1] == Y[j - 1]) {  dp[i][j] = dp[i - 1][j - 1] + 1;  } else {  dp[i][j] = (dp[i - 1][j] > dp[i][j - 1]) ? dp[i - 1][j] : dp[i][j - 1];  }  }  }  // dp[m][n]存储了X和Y的最长公共子序列的长度  return dp[m][n];  
}

运行结果:

14. 填入0~9的数字。要求:连续的两个数字不能相邻。(左右.上下.对角都算相邻) 一共有多少种可能的填数方案? 请输出一个表示方案数目的整数。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>int disp(int a[], int n) {int i;for (i = 0; i < 9; i++) {if (abs(a[i] - a[i + 1]) == 1 && i != 2 && i != 6)return 0;}for (i = 0; i < 6; i++) {if (abs(a[i] - a[i + 4]) == 1)return 0;}for (i = 0; i < 7; i++) {if (abs(a[i] - a[i + 3]) == 1 && i != 3)return 0;}for (i = 0; i < 5; i++) {if (abs(a[i] - a[i + 5]) == 1 && i != 2)return 0;}return 1;
}void swap(int *xp, int *yp) {int temp = *xp;*xp = *yp;*yp = temp;
}void permute(int *a, int l, int r, int *count) {int i;if (l == r) {if (disp(a, r + 1)) {(*count)++;}} else {for (i = l; i <= r; i++) {swap((a + l), (a + i));permute(a, l + 1, r, count);swap((a + l), (a + i)); // backtrack}}
}int main() {int a[10] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};int n = 10;int count = 0;permute(a, 0, n - 1, &count);printf("%d\n", count);return 0;
}

运行结果: 

15. 编程输出一个特别的数,该数是一个由1~9组成的9位数,每个数字只能出现一次,且这个9位数由高位到低位前i位能被i整除。

#include <stdio.h>
int main(void)
{
long i[9];
long j, n;
i[4] = 5;
for (i[0] = 1; i[0] < 10; i[0] += 2)
{
for (i[1] = 2; i[1] < 9; i[1] += 2)
{
for (i[2] = 1; i[2] < 10; i[2] += 2)
{
if (i[2] == i[0])
continue;
for (i[3] = 2; i[3] < 9; i[3] += 2)
{
if (i[3] == i[1])
continue;
for (i[5] = 2; i[5] < 9; i[5] += 2)
{
if (i[5] == i[3] || i[5] == i[1])
continue;
for (i[6] = 1; i[6] < 10; i[6] += 2)
{
if (i[6] == i[4] || i[6] == i[2] || i[6] == i[0])
continue;
for (i[7] = 2; i[7] < 9; i[7] += 2)
{
if (i[7] == i[5] || i[7] == i[3] || i[7] == i[1])
continue;
for (i[8] = 1; i[8] < 10; i[8] += 2)
{
if (i[8] == i[6] || i[8] == i[4] || i[8] == i[2] || i[8] == i[0])
continue;
n = 0;
for (j = 0; j < 9; j++)
{
n = n * 10 + i[j];
if (n % (j + 1) != 0)
break;
}
if (j == 9)
printf("%ld\n", n);
}
}
}
}
}
}
}
}
}

运行结果:

 结语 

不举步,越不过栅栏

不迈腿,登不上高山

!!!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/392543.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

新手小白嵌入式单片机教程,ESP32

1.什么是ESP32。 ESP32是一款由乐鑫信息科技&#xff08;Espressif Systems&#xff09;推出的高度集成的低功耗系统级芯片&#xff08;SoC&#xff09;&#xff0c;它结合了双核处理器、无线通信、低功耗特性和丰富的外设&#xff0c;特别适用于各种物联网&#xff08;IoT&am…

Robot Operating System——深度解析单线程执行器(SingleThreadedExecutor)执行逻辑

大纲 创建SingleThreadedExecutor新增Nodeadd_nodetrigger_entity_recollectcollect_entities 自旋等待get_next_executablewait_for_workget_next_ready_executableTimerSubscriptionServiceClientWaitableAnyExecutable execute_any_executable 参考资料 在ROS2中&#xff0c…

python 爬虫入门实战——爬取维基百科“百科全书”词条页面内链

1. 简述 本次爬取维基百科“百科全书”词条页面内链&#xff0c;仅发送一次请求&#xff0c;获取一个 html 页面&#xff0c;同时不包含应对反爬虫的知识&#xff0c;仅包含最基础的网页爬取、数据清洗、存储为 csv 文件。 爬取网址 url 为 “https://zh.wikipedia.org/wiki/…

数据结构:基于顺序表实现通讯录系统(含源码)

目录 一、前言 二、各个功能的实现 2.1 初始化通讯录 2.2 添加通讯录数据 2.3 查找通讯录数据 2.4 删除通讯录数据 2.5 修改通讯录数据 2.6 展示通讯录数据​编辑 2.7 销毁通讯录数据 三、添加菜单和测试 四、完整源码 sxb.h sxb.c contact.h contact.c test.c 一、前…

【隐私计算篇】混淆电路之深入浅出

入门隐私计算的阶段&#xff0c;一般都会涉及对于混淆电路的学习&#xff0c;这是因为混淆电路是多方安全计算中的基础密码原语&#xff0c;也是隐私保护中重要的技术。为了帮助更好地理解混淆电路的原理&#xff0c;今天对其进行原理以及相关优化手段进行解析和分享。 1. 混淆…

不同角色路由权限配置(六)

一、启用方式 配置开启config/config.ts。同时需要 src/access.ts 提供权限配置 export default {access: {},// access 插件依赖 initial State 所以需要同时开启initialState: {}, };这里以扩展的路由配置为例&#xff0c;配置只有admin权限才能查看的页面 1、在src/acces…

前端web开发HTML+CSS3+移动web(0基础,超详细)——第3天

目录 一&#xff0c;列表-无序和有序的定义列表 二&#xff0c;表格-基本使用与表格结构标签 三&#xff0c;合并单元格 四&#xff0c;表单-input标签 五&#xff0c;表单-下拉菜单 六&#xff0c;表单-文本域 七&#xff0c;表单-label标签 八&#xff0c;表单-按钮 …

【已解决】页面操作系统功能,诡异报错500nginx错误

【已解决】页面操作系统功能&#xff0c;诡异报错500nginx错误&#xff0c;后台没有任何报错信息 不知道啥原因 清理了浏览器缓存 也没有效果 还有一个表现情况&#xff0c;同样的操作&#xff0c;有时可以又是不行 因为报错ng的代理问题&#xff0c;检查了ng配置 后续经过同…

【C/C++】C语言和C++实现Stack(栈)对比

我们初步了解了C&#xff0c;也用C语言实现过栈&#xff0c;就我们当前所更新过的有关C学习内容以栈为例子&#xff0c;来简单对比一下C语言和C。 1.C中栈的实现 栈的C语言实现在【数据结构】栈的概念、结构和实现详解-CSDN博客 &#xff0c;下面是C实现的栈&#xff0c; 在St…

OD C卷 - 多线段数据压缩

多段 线 数据压缩 &#xff08;200&#xff09; 如图中每个方格为一个像素&#xff08;i&#xff0c;j&#xff09;&#xff0c;线的走向只能水平、垂直、倾斜45度&#xff1b;图中线段表示为(2, 8)、&#xff08;3,7&#xff09;、&#xff08;3, 6&#xff09;、&#xff08…

学习STM32(2)--STM32单片机GPIO应用

目录 1 引 言 2 实验目的 3 实验内容 3.1掌握STM32F103的GPIO控制 3.1.1 GPIO的分组 3.1.2 GPIO的常用功能 3.1.3 STM32单片机GPIO位结构 3.1.4 STM32单片机GPIO工作模式 3.1.5 STM32的GPIO 输出-点亮LED编程要点 使用GPIO时&#xff0c;按下面步骤进行&#xff1…

部署服务器项目及发布

当技术总监直接丢给我一个服务器账号密码时&#xff0c;我该怎么完成映射本机&#xff1b;配置网关&#xff1b;配置代理和发布项目呢&#xff1f; 我使用的是putty远程登录到服务器 输入ip后&#xff0c;点open 输入账号密码 登录的账号如果不是root&#xff1b;使用sudo su…

sqllab靶场练习第1~15关

1、第一关 代码解析 if(isset($_GET[id]))//判断获取的id字段是否为空 { $id$_GET[id]; //logging the connection parameters to a file for analysis. $fpfopen(result.txt,a);//打开这个文件&#xff0c;记录操作的日志 fwrite($fp,ID:.$id."\n"); fclose($fp);…

【C++高阶】深入理解C++异常处理机制:从try到catch的全面解析

&#x1f4dd;个人主页&#x1f339;&#xff1a;Eternity._ ⏩收录专栏⏪&#xff1a;C “ 登神长阶 ” &#x1f921;往期回顾&#x1f921;&#xff1a;Lambda表达式 &#x1f339;&#x1f339;期待您的关注 &#x1f339;&#x1f339; ❀C异常 &#x1f4d2;1. C异常概念…

WPF学习(3)- WrapPanel控件(瀑布流布局)+DockPanel控件(停靠布局)

WrapPanel控件&#xff08;瀑布流布局&#xff09; WrapPanel控件表示将其子控件从左到右的顺序排列&#xff0c;如果第一行显示不了&#xff0c;则自动换至第二行&#xff0c;继续显示剩余的子控件。我们来看看它的结构定义&#xff1a; public class WrapPanel : Panel {pub…

【前端】(仅思路)如何在前端实现一个fc手柄,将手机作为游戏手柄设备。

文章目录 背景界面demo原型图&#xff08;没错&#xff0c;就是它&#xff0c;童年回忆&#xff09; 遇到的问题最终后端demo(甚至比前端逻辑更简单) 背景 突发奇想&#xff0c;想要在前端实现一个fc游戏手柄&#xff0c;然后控制电脑的nes模拟器玩玩魂斗罗。 思路很简单&…

【编程笔记】解决移动硬盘无法访问文件或目录损坏且无法读取

解决移动硬盘无法访问文件或目录损坏且无法读取 只解决&#xff1a;移动硬盘无法访问文件或目录损坏且无法读取 问题 由于频繁下载数据&#xff0c;多次安装虚拟机导致磁盘无法被系统识别。磁盘本身是好的&#xff0c;只是不能被识别&#xff0c;如果将磁盘格式化&#xff0c…

Chainlit快速实现AI对话应用1 分钟内实现聊天数据的持久化保存

概述 默认情况下&#xff0c;Chainlit 应用不会保留其生成的聊天和元素。即网页一刷新&#xff0c;所有的聊天记录&#xff0c;页面上的所有聊天记录都会消失。但是&#xff0c;存储和利用这些数据的能力可能是您的项目或组织的重要组成部分。 一旦启用&#xff0c;数据持久性…

Unlikely argument type for equals(): int seems to be unrelated to Long

代码审查不规范&#xff1a; Unlikely argument type for equals(): int seems to be unrelated to Long check package code_check;public class Obj {public Obj(){}private Long mail;public Long getMail(){return mail;}public void setMail(Long mail){this.mail mail;…

【零基础实战】基于物联网的人工淡水湖养殖系统设计

文章目录 一、前言1.1 项目介绍1.1.1 开发背景1.1.2 项目实现的功能1.1.3 项目硬件模块组成1.1.4 ESP8266工作模式配置 1.2 系统设计方案1.2.1 关键技术与创新点1.2.2 功能需求分析1.2.3 现有技术与市场分析1.2.4 硬件架构设计1.2.5 软件架构设计1.2.6 上位机开发思路 1.3 系统…