度小满笔试 机器学习第2题求助



#include <iostream>
#include <string>
#include <algorithm>
#include <vector>
#include <map>
#include <queue>
#include <unordered_set>
using namespace std;
int getRes(vector<int> v, int a, int b, int c) {
	int n = v.size();
	vector<vector<int> > dp(n, vector<int>(n, n));
	for (int i = 0; i < n; i++) {
		dp[i][i] = 0;
	}
	for (int i = n - 1; i >= 0;i--) {
		for (int j = 0; j < n; j++) {
			if (v[i] > 1) dp[i][j] = min(dp[i][j], dp[i][v[i] - 1] + dp[v[i] - 1][j] + b);
			else if (v[i] < n) dp[i][j] = min(dp[i][j], dp[i][v[i] + 1] + dp[v[i] + 1][j] + c);
			else dp[i][j] = min(dp[i][v[i]] + dp[v[i]][j] + a, dp[i][j]);
		}
	}
	return dp[0][n - 1];
}
int main() {
	vector<int> v = { 3,6,4,3,4,5,6 };
	int res = getRes(v, 1, 1, 1);
	cout << res << endl;
	return 0;
}

用动规的思想来做,不过状态转移方程式和初始化顺序有些问题,0AC,还请大佬帮忙解答。dp[i][j]代表从城市i到城市j的最小花费。#度小满##笔试题目#
全部评论
解释下思路? 我是用的是计算花1块能到哪些城市,花2块。。。。这样
点赞 回复 分享
发布于 2019-09-15 20:57
可以提供一下第一题 障碍题 和第三题 博弈论的代码吗?
点赞 回复 分享
发布于 2019-09-15 21:25
我当时是这个思路,不过优化方法跟你不太一样,代码没保存,只能简单说说思路,通过了90%,不知道为啥没AC,思路是,构建一个N+1的数组,代表着从当前城市到N城市的距离 输入数组 nums动态规划数组 dp 初始化 dp[i] = A + C * (N - nums[i]) 迭代对于每个 城市 i最优的左边界lmax和右边界rmax对于 lmax 到 i 的城市j然后更新dp[i] = min(dp[i], dp[j] + (i - j) * C + A)同理,i到rmax 也是 终止条件:dp[1] 没有变化
点赞 回复 分享
发布于 2019-09-15 21:32

相关推荐

09-27 20:04
东北大学 Java
2024/09/27&nbsp;度小满二面1.介绍实习所做的项目,你在项目中负责什么,你在项目中是什么角色,你实现了什么功能,遇到了什么问题是怎么解决的拷打项目9.乐观锁是提交时读取版本还是获取时读取版本10.如果提交失败11.事务的回滚是如何实现的12.回滚前的版本存在哪里13.微服务和分布式系统之间的区别是什么14.springboot和spring之间的区别是什么15.springboot中的starter是什么16.如果从服务提供方的角度写一个starter应该注意什么17.int&nbsp;a&nbsp;=&nbsp;1;&nbsp;int&nbsp;b&nbsp;=&nbsp;2;&nbsp;return&nbsp;a+b;如果这段代码运行起来会经历什么步骤,越详细越好从jvm说到java文件编译18.jvm内存分布19.多个jvm之间相互调用应该怎么实现20.redis在开发中的作用是什么你用过什么样的redis部署架构21.redis使用分布式锁应该注意什么问题22.如果手写一个红锁应该怎么实现23.项目中为什么使用线程池24.使用线程池的应该注意什么25.为什么要针对io密集型操作和cpu密集型操作设计不同线程池,他们各自的特点是什么算法:使用非递归的方式实现二叉树的中序遍历这完全和一面不是一个难度了,问题问的好发散,问的都是应该注意什么,不问纯八股,需要对所背的八股有思考,问了好多实现,还是要真实写过这些的,估计是凉了,好难,不过还是期待一手三面吧。许愿三面
点赞 评论 收藏
分享
10-11 18:07
已编辑
华中科技大学 Java
点赞 评论 收藏
分享
点赞 8 评论
分享
牛客网
牛客企业服务