动态规划经典最优子结构总结

本文总结了动态规划在多个问题中的应用,包括0-1背包问题、有代价的最短路径、划分问题、凑数问题、装配线调度、字符串距离计算、最长公共子序列、最大子序列和最长递增子序列。通过具体实例,阐述了动态规划解决这些问题的最优子结构策略。
摘要由CSDN通过智能技术生成

(1)0-1背包:

如果有一个背包,总载重量为Wt,有n个物品,每个物品重Wi,每个物品价值Ci,那么如何装才能让这个包里面东西的价值最高?

dp[i][j]为前i个物品当中选择装进一个载重量为j的包里最大价值,则:

初始化:dp【0】【x】=0;for i=0-》n;j=0-》Wt

dp[i][j]的值为:dp[i-1][j](第i个物品不装进包里),dp[i-1][j-Wi]+Ci(第i个物品装进包里)的较大者。


(2)有代价的最短路径(动态规划和dijkstra混合使用):

寻求点1到点A之间的最短路,但是每到一个点就会消耗一点钱,这个值用money【i】来表示,钱不够路不通,初始有钱N。

dp【i】【j】为走到第i个点,还剩j钱的最短路径,则:

初始化dp【x】【y】=inf;dp【1】【N-money[1]】=0;ifvisited[x][y]=false;ifVisited[1][N-money[1]]=true;

shortest=inf;
moneyLeft=inf;
number=inf;
while(1){
	for(int z=0;z<A;z++)
	for(int x=0;x<N;x++){
		if(dp[z][x]<number){
			shortest=z;
			mo
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值