算法的重要性,我就不多说了吧,想去大厂,就必须要经过基础知识和业务逻辑面试+算法面试。所以,为了提高大家的算法能力,这个公众号后续每天带大家做一道算法题,题目就从LeetCode上面选 !

今天和大家聊的问题叫做 最大休假天数,我们先来看题面:

https://leetcode-cn.com/problems/maximum-vacation-days/

力扣想让一个最优秀的员工在 N 个城市间旅行来收集算法问题。

但只工做不玩耍,聪明的孩子也会变傻,因此您能够在某些特定的城市和星期休假。

您的工做就是安排旅行使得最大化你能够休假的天数,可是您须要遵照一些规则和限制。

规则和限制:

您只能在 N 个城市之间旅行,用 0 到 N-1 的索引表示。一开始,您在索引为0的城市,而且那天是星期一。

这些城市经过航班相连。这些航班用 N*N 矩阵 flights(不必定是对称的)表示,flights[i][j] 表明城市i到城市j的航空状态。若是没有城市i到城市j的航班,flights[i][j] = 0;不然,flights[i][j] = 1。同时,对于全部的 i,flights[i][i] = 0。

您总共有 K 周(每周7天)的时间旅行。您天天最多只能乘坐一次航班,而且只能在每周的星期一上午乘坐航班。因为飞行时间很短,咱们不考虑飞行时间的影响。

对于每一个城市,不一样的星期您休假天数是不一样的,给定一个 N*K 矩阵 days 表明这种限制,days[i][j] 表明您在第j个星期在城市i能休假的最长天数。

给定 flights 矩阵和 days 矩阵,您须要输出 K 周内能够休假的最长天数。

示例

示例 1:
输入:flights = [[0,1,1],[1,0,1],[1,1,0]],
days = [[1,3,1],[6,0,3],[3,3,3]]
输出: 12
解释:
Ans = 6 + 3 + 3 = 12.
最好的策略之一:
第一个星期 : 星期一从城市0飞到城市1,玩6天,工做1天。
(虽然你是从城市0开始,但由于是星期一,咱们也能够飞到其余城市。)
第二个星期 : 星期一从城市1飞到城市2,玩3天,工做4天。
第三个星期 : 呆在城市2,玩3天,工做4天。示例 2:
输入:flights = [[0,0,0],[0,0,0],[0,0,0]],
days = [[1,1,1],[7,7,7],[7,7,7]]
输出: 3
解释:
Ans = 1 + 1 + 1 = 3.
因为没有航班可让您飞到其余城市,你必须在城市0呆整整3个星期。
对于每个星期,你只有一天时间玩,剩下六天都要工做。
因此最大休假天数为3.示例 3:
输入:flights = [[0,1,1],[1,0,1],[1,1,0]],
days = [[7,0,0],[0,7,0],[0,0,7]]
输出: 21
解释:
Ans = 7 + 7 + 7 = 21
最好的策略之一是:
第一个星期 : 呆在城市0,玩7天。
第二个星期 : 星期一从城市0飞到城市1,玩7天。
第三个星期 : 星期一从城市1飞到城市2,玩7天。注意:
N 和 K 都是正整数,在 [1, 100] 范围内。
矩阵 flights 的全部值都是 [0, 1] 范围内的整数。
矩阵 days 的全部值都是 [0, 7] 范围内的整数。
超过休假天数您仍能够呆在那个城市,可是在额外的日子您须要 工做 ,
这些日子不会算作休假日。
若是您从城市A飞往城市B并在当天休假日,
这个休假会被算做是城市B的休假日。
咱们不考虑飞行时间对计算休假日的影响。

解题

http://www.javashuo.com/article/p-tpbcozgs-mt.html

class Solution {
public:int maxVacationDays(vector<vector<int>>& flights, vector<vector<int>>& days) {int dp[100][100];// 在 i 城市时, 是第 k 周, 最多休假天数memset(dp, 0xff, sizeof(dp));int n = flights.size(), k = days[0].size(), maxdays = 0;for(int i = 0; i < n; ++i){//能够待在原地不走flights[i][i] = 1;} for(int i = 0; i < n; ++i)//初始化第0周{if(flights[0][i])//0城市能够飞到i城市{dp[i][0] = days[i][0];maxdays = max(maxdays, dp[i][0]);}}for(int wk = 1; wk < k; ++wk)//遍历剩余的周{for(int i = 0; i < n; ++i)//遍历每一个城市{if(dp[i][wk-1] == -1)//上周i城市的状态不存在continue;for(int j = 0; j < n; ++j)//我要去 j 城市{if(!flights[i][j])//没有航班,不行continue;dp[j][wk] = max(dp[j][wk], dp[i][wk-1]+days[j][wk]);maxdays = max(maxdays, dp[j][wk]);}}}return maxdays;}
};

好了,今天的文章就到这里,如果觉得有所收获,请顺手点个在看或者转发吧,你们的支持是我最大的动力 。

上期推文:

LeetCode1-560题汇总,希望对你有点帮助!

LeetCode刷题实战561:数组拆分 I

LeetCode刷题实战562:矩阵中最长的连续1线段

LeetCode刷题实战563:二叉树的坡度

LeetCode刷题实战564:寻找最近的回文数

LeetCode刷题实战565:数组嵌套

LeetCode刷题实战566:重塑矩阵

LeetCode刷题实战567:字符串的排列

​LeetCode刷题实战568:最大休假天数相关推荐

  1. ​LeetCode刷题实战584:寻找用户推荐人

    算法的重要性,我就不多说了吧,想去大厂,就必须要经过基础知识和业务逻辑面试+算法面试.所以,为了提高大家的算法能力,这个公众号后续每天带大家做一道算法题,题目就从LeetCode上面选 ! 今天和大家 ...

  2. ​LeetCode刷题实战577:员工奖金

    算法的重要性,我就不多说了吧,想去大厂,就必须要经过基础知识和业务逻辑面试+算法面试.所以,为了提高大家的算法能力,这个公众号后续每天带大家做一道算法题,题目就从LeetCode上面选 ! 今天和大家 ...

  3. ​LeetCode刷题实战603:连续空余座位

    算法的重要性,我就不多说了吧,想去大厂,就必须要经过基础知识和业务逻辑面试+算法面试.所以,为了提高大家的算法能力,这个公众号后续每天带大家做一道算法题,题目就从LeetCode上面选 ! 今天和大家 ...

  4. ​LeetCode刷题实战623:在二叉树中增加一行

    算法的重要性,我就不多说了吧,想去大厂,就必须要经过基础知识和业务逻辑面试+算法面试.所以,为了提高大家的算法能力,这个公众号后续每天带大家做一道算法题,题目就从LeetCode上面选 ! 今天和大家 ...

  5. ​LeetCode刷题实战371:两整数之和

    算法的重要性,我就不多说了吧,想去大厂,就必须要经过基础知识和业务逻辑面试+算法面试.所以,为了提高大家的算法能力,这个公众号后续每天带大家做一道算法题,题目就从LeetCode上面选 ! 今天和大家 ...

  6. ​LeetCode刷题实战375:猜数字大小 II

    算法的重要性,我就不多说了吧,想去大厂,就必须要经过基础知识和业务逻辑面试+算法面试.所以,为了提高大家的算法能力,这个公众号后续每天带大家做一道算法题,题目就从LeetCode上面选 ! 今天和大家 ...

  7. ​LeetCode刷题实战362:敲击计数器

    算法的重要性,我就不多说了吧,想去大厂,就必须要经过基础知识和业务逻辑面试+算法面试.所以,为了提高大家的算法能力,这个公众号后续每天带大家做一道算法题,题目就从LeetCode上面选 ! 今天和大家 ...

  8. ​LeetCode刷题实战450:删除二叉搜索树中的节点

    算法的重要性,我就不多说了吧,想去大厂,就必须要经过基础知识和业务逻辑面试+算法面试.所以,为了提高大家的算法能力,这个公众号后续每天带大家做一道算法题,题目就从LeetCode上面选 ! 今天和大家 ...

  9. ​LeetCode刷题实战546:移除盒子

    算法的重要性,我就不多说了吧,想去大厂,就必须要经过基础知识和业务逻辑面试+算法面试.所以,为了提高大家的算法能力,这个公众号后续每天带大家做一道算法题,题目就从LeetCode上面选 ! 今天和大家 ...

最新文章

  1. Java 包(package)
  2. 静态分析android代码, 循环与trycatch
  3. Ubuntu系统目录结构
  4. 64匹马,8个赛道,最少多少次比赛找出最快的 4 匹马,以及对所有马进行排序
  5. 近期code(11.16)
  6. 编译原理:利用yacc/bison进行语法分析
  7. android115 自定义控件
  8. Linux系统下Nginx支持ipv6
  9. IIS 10 安装URLRewrite组件 方式
  10. 电脑中了MEMZ病毒怎么办
  11. 查看redis安装路径
  12. CCNA实验前准备(转)
  13. 【web前端】前端性能优化指南,还不来看看?
  14. 13.1 数状数组 ——【小朋友排队】
  15. java计算机毕业设计高校教师个人主页网站设计与实现(附源码、数据库)
  16. v-model的使用
  17. 昆明部分小区因焚炉检修垃圾堆积如山 官方:已出台调配方案
  18. 零散知识点20180403
  19. java对象转json jackson_将Jackson对象转换为JSONObject java
  20. 在Mac电脑上更新打印机软件?

热门文章

  1. python进程绑定CPU
  2. 最个性创意的圣诞礼物 忆恋拼图
  3. ds数据库_面向公民数据科学家的ds 101 Alteryx
  4. Makefile origin 函数
  5. 2021-08-23 layui给input文本框赋值
  6. apt安装JDK8并设置为系统默认Java
  7. SLF4j 和 common-logging
  8. 【JSConf EU 2018】有关浏览器弹出式窗口的相关探讨
  9. Python中秋赏月专用代码【源码好又多】
  10. linux riot密码,在Linux系统上安装Riot的方法