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

算法笔记(动态规划入门题)

1.找零钱

int coinChange(int* coins, int coinsSize, int amount) {int dp[amount + 1];memset(dp,-1,sizeof(dp));dp[0] = 0;for (int i = 1; i <= amount; i++)for (int j = 0; j < coinsSize; j++)if (coins[j] <= i && dp[i - coins[j]] != -1)if (dp[i] == -1 || dp[i] > dp[i - coins[j]] + 1)dp[i] = dp[i - coins[j]] + 1;return dp[amount];
}

2.有奖问答

#include <iostream>
using namespace std;
int ans=0;
int dp[31][10];//dp[i][j]代表回答了i道题目时得到了j*10的分数的 总方案数
int main(){dp[0][0] = 1;//初始化起点,起点就表示一个方案数for(int i = 1;i<=30;i++)for(int j = 0;j<=9;j++)if(j==0)//得到零分,说明这一题答错了,那么方案数量就是上一题的所有方案之和,上一题多少分都不影响当前题,因为一旦答错,分数归零。for(int k = 0;k<=9;k++)dp[i][j] += dp[i-1][k];else//答对了,那么说明这个方案必须承接上一次答对的方案数,上一题必须是当前分数-10,即j-1道题。dp[i][j] = dp[i-1][j-1];for(int i = 0;i<=30;i++)ans+=dp[i][7];//记录所有答对7次的方案数cout<<ans;return 0;answerquest
}

3.字符串转换

#include <iostream>
#include <cstdio>
#include <string>
using namespace std;
string s,t;
int transform(){int l1=s.length(),l2=t.length();int dp[l1+1][l2+1];for(int i=0;i<l1;i++)dp[i][0]=i;for(int j=0;j<l2;j++)dp[0][j]=j;for(int i=1;i<=l1;i++)for(int j=1;j<=l2;j++){if(s[i-1]==t[j-1])dp[i][j]=dp[i-1][j-1];elsedp[i][j]=min(min(dp[i][j-1],dp[i-1][j]),dp[i-1][j-1])+1;}return dp[l1][l2];
}
int main()
{// 请在此输入您的代码cin>>s>>t;printf("%d",transform());return 0;
}

动态规划浅析——记一道困难的字符串操作数问题 - 知乎 (zhihu.com)这个文章写的很不错,可以看看。

4.完全背包问题

#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
int n,v;
struct obj{int v;//体积int c;//价值
};
int packet(obj o[]){int dp[n+1][v+1];//选第i个物品且体积为j时的价值memset(dp,0,sizeof(dp));for(int i=1;i<=n;i++){for(int j=0;j<=v;j++){dp[i][j]=dp[i-1][j];for(int k=0;k*o[i].v<=j;k++){dp[i][j]=max(dp[i][j],dp[i-1][j-k*o[i].v]+k*o[i].c);}}}return dp[n][v];
}
int main()
{// 请在此输入您的代码scanf("%d%d",&n,&v);obj o[n+1];o[0].v=0,o[0].c=0;for(int i=1;i<=n;i++)scanf("%d%d",&o[i].v,&o[i].c);printf("%d",packet(o));return 0;
}

5.松散子序列

#include <iostream>
#include <string>
#include <cstring>
using namespace std;
string s;
inline int value(char a){return a-'a'+1;
}
int SubSeq(){int len=s.length();int dp[len];memset(dp,0,sizeof(dp));dp[0]=value(s[0]);dp[1]=max(dp[0],value(s[1]));for(int i=2;i<len;i++)dp[i]=max(dp[i-1],dp[i-2]+value(s[i]));return dp[len-1];
}
int main()
{// 请在此输入您的代码cin>>s;cout<<SubSeq();return 0;
}
//字符串版的打家劫舍,挺简单的

————部分代码是别人写的题解,本人仅为转载,非原创;

相关文章:

  • leetcode:1736. 替换隐藏数字得到的最晚时间(python3解法)
  • KubeSphere平台使用
  • Java和SpringBoot学习路线图
  • Linux下使用Docker部署MinIO实现远程上传
  • C#,入门教程(38)——大型工程软件中类(class)修饰词partial的使用方法
  • LeetCode刷题——55. 跳跃游戏(HOT100)
  • 【算法】递归
  • 2024--Django平台开发-Redis集群(十一)
  • 数学建模美赛资料(赛题+获奖论文更新)
  • EasyX图形化学习(三)
  • [力扣 Hot100]Day7 接雨水
  • TS 学习笔录(持续更新中)
  • Unity之四元数
  • 渐开线齿轮计算软件开发Python
  • 如何快速申请GPT账号?
  • Apache Pulsar 2.1 重磅发布
  • Java 23种设计模式 之单例模式 7种实现方式
  • JavaScript新鲜事·第5期
  • js递归,无限分级树形折叠菜单
  • Rancher如何对接Ceph-RBD块存储
  • React系列之 Redux 架构模式
  • Spring框架之我见(三)——IOC、AOP
  • Synchronized 关键字使用、底层原理、JDK1.6 之后的底层优化以及 和ReenTrantLock 的对比...
  • 关于Android中设置闹钟的相对比较完善的解决方案
  • 开源中国专访:Chameleon原理首发,其它跨多端统一框架都是假的?
  • 聊聊springcloud的EurekaClientAutoConfiguration
  • 扑朔迷离的属性和特性【彻底弄清】
  • 普通函数和构造函数的区别
  • 如何编写一个可升级的智能合约
  • 在electron中实现跨域请求,无需更改服务器端设置
  • 转载:[译] 内容加速黑科技趣谈
  • 格斗健身潮牌24KiCK获近千万Pre-A轮融资,用户留存高达9个月 ...
  • # 透过事物看本质的能力怎么培养?
  • ###51单片机学习(2)-----如何通过C语言运用延时函数设计LED流水灯
  • #我与Java虚拟机的故事#连载06:收获颇多的经典之作
  • (1综述)从零开始的嵌入式图像图像处理(PI+QT+OpenCV)实战演练
  • (39)STM32——FLASH闪存
  • (C语言)fgets与fputs函数详解
  • (PyTorch)TCN和RNN/LSTM/GRU结合实现时间序列预测
  • (pytorch进阶之路)CLIP模型 实现图像多模态检索任务
  • (zt)最盛行的警世狂言(爆笑)
  • (附源码)计算机毕业设计大学生兼职系统
  • (每日持续更新)jdk api之FileReader基础、应用、实战
  • (十) 初识 Docker file
  • (四)模仿学习-完成后台管理页面查询
  • (转)jdk与jre的区别
  • (转)微软牛津计划介绍——屌爆了的自然数据处理解决方案(人脸/语音识别,计算机视觉与语言理解)...
  • .Net Core缓存组件(MemoryCache)源码解析
  • .NET/C# 异常处理:写一个空的 try 块代码,而把重要代码写到 finally 中(Constrained Execution Regions)
  • .NET/C# 中你可以在代码中写多个 Main 函数,然后按需要随时切换
  • .net反混淆脱壳工具de4dot的使用
  • .NET企业级应用架构设计系列之开场白
  • @vue/cli 3.x+引入jQuery
  • [ 英语 ] 马斯克抱水槽“入主”推特总部中那句 Let that sink in 到底是什么梗?
  • [3D游戏开发实践] Cocos Cyberpunk 源码解读-高中低端机性能适配策略