算法作业-求解袋鼠过河问题(dp)

  • Post author:
  • Post category:其他


题目:

在这里插入图片描述

本题是一个简单的dp问题,只需要知道表达式dp[i + j] = std::min(dp[i] + 1, dp[i + j]);就行了,这道题我唯一的迷惑就是不知道跳上第一个木桩算不算一次,这里涉及到dp[0]的取值。如果按照所给答案等于4来看的话,就算一次弹跳了。个人感觉这道题题意给得不够明确。

#include<iostream>
#include<algorithm>
#include<vector>

using std::cin;
using std::cout;
using std::endl;
int main()
{
	int n, dis;
	std::vector<int>distance;
	cin >> n;
	for (auto i = 0; i < n; i++) {
		cin >> dis;
		distance.push_back(dis);
	}
	std::vector<int>dp(n + 1, INT_MAX);
	//这道题不知道到第一个木桩是不是算一次,如果按照题目所给答案来看的话,dp[0] = 1,但题目没有明确给出说明,只能这样理解了。
	dp[0] = 1;
	for (auto i = 0; i < n; i++) {
		for (auto j = 1; j <= distance[i]; j++) {
			if(i + j <= n)dp[i + j] = std::min(dp[i] + 1, dp[i + j]);
		}
	}
	cout << dp[n - 1] << endl;
	return 0;
}



版权声明:本文为i_actor原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。