动态规划训练日记

这篇博客详细介绍了动态规划在解决洛谷P1244青蛙过河问题和洛谷P1676神奇的四次方数问题中的应用。在青蛙过河问题中,通过状态表示dp[i][j]和状态转移方程dp[i][j]=dp[i-1][j]*2,分析了如何使青蛙顺利过河。而在神奇的四次方数问题中,将问题转换为完全背包问题,利用状态转移方程dp[j]=min(dp[j],dp[j-a[i]]+1)找到所需的最少数字数量。" 113930984,8241931,FFmpeg中的AVPacket详解:结构与操作方法,"['FFmpeg', '多媒体处理', '视频编码', '音频编码', '数据包处理']
摘要由CSDN通过智能技术生成

1.洛谷P1244青蛙过河
lgP1244青蛙过河
动态规划
状态表示:dp[i][j]表示石墩数量为i,荷叶数量为j时能够走过青蛙的数量。
状态转移:
因为青蛙在石墩上必须按照汉诺塔的形式排列。所以要从起点走到终点,必须要让编号最大的青蛙,先跳过去。为了这个目的,我们需要把编号最大的青蛙上面的青蛙全部挪开。那么,当i=0,j=k时,
因为只能有k个青蛙先跳到荷叶上,所以能通过的青蛙数目为k(荷叶上的青蛙)+1(起点处的青蛙),即
dp[0][k]=k+1;接下来我们考虑当i=1,j=k时的情况:可以想象成是起点变成了两个石墩。那么由于一个石墩上可以放置k+1个青蛙,两个石墩就可以放置(k+1)*(1<<1)个青蛙。以此类推可得状态转移方程:

dp[i][j]=dp[i-1][j]*2;

#include<iostream>
using namespace std;
typedef long long ll;
ll dp[3200][3200];
ll h,k;
int main(){
   
	cin>>h>>k;
	dp[0][k]=k+1;
	for (
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值