自己是真滴菜啊,跟着师兄做校招笔试被虐的体无完肤。在这里记录一下几道题的解法吧。

由于业绩优秀,公司给小Q放了n天的假。身为工作狂的小Q打算在假期中工作、锻炼或者休息。他有一个奇怪的习惯,:不会连续两天工作或锻炼。只有当公司营业时,小Q才能去工作,只有当健身房营业时,小Q才能去健身,小Q每天只能干一件事。给出假期中的公司,健身房营业情况,求小Q最少需要休息几天。

输入描述:

第一行一个整数n(1<=n<=100000)表示放假天数;第二行n个数 每个数为0或者1,第i个数表示公司在第i天是否营业。第三行n个数,每个数为0或者1,第i个数表示那沈芳在第i填是否营业。 1为营业,0为不营业。

比如

4

1 1 0 0

0 1 1 0

思路:这道题是有状态的动态规划。因为有一个限制条件,就是不会连续两天工作或者锻炼,所以是有状态的转移。

那么我设置一个dp[3][n],其中第一行dp[0][i]表示第i天休息的时候,i天之内最少休息的天数;dp[1][i]表示第i天工作的时候,i天之内最少休息的天数.dp[2][i]表示第i天健身的时候,i天之内最少休息的天数。

递推关系是:对于第i天,如果今天可以工作,今天工作条件下最少休息的天数  = min(昨天健身条件下最少休息天数,昨天休息条件下最少休息天数);这里面,因为今天工作的条件下就限制了昨天不能是工作,所以这里面只有两个相比较;同样道理,今天健身条件下最少休息天数 = min(昨天工作条件下最少休息天数,昨天休息条件下最少休息天数)。但是对于今天休息的情况,就不一样了,因为今天休息,昨天干什么都行,所以是:今天休息条件下最少的休息天数 = 1 + min(昨天健身条件下最少休息天数,昨天休息条件下最少休息天数,昨天工作条件下最少休息天数)。

所以代码如下所示:

int mymin(int a, int b, int c){int ret = a;if (b < ret) ret = b;if (c < ret) ret = c;return ret;
}
int main(){int n;cin >> n;int canwork[10005] = {0};int canfitness[10005] = { 0 };for (int i = 0; i < n; i++){cin >> canwork[i];}for (int i = 0; i < n; i++){cin >> canfitness[i];}//dp[0][i]表示第i天休息的最少的休息天数,dp[1][i]表示第i天工作最少的休息天数,dp[2][i]表示第i天健身最少的休息天数int dp[3][10005];memset(dp, 0, sizeof(dp));/*边界条件:*/dp[0][0] = 1;if (canwork[0]) dp[1][0] = 0;if (canfitness[0]) dp[2][0] = 0;for (int i = 1; i < n; i++){/*讨论今天能不能工作下的情况*/if (canwork[i]){if (canfitness[i - 1]){//上一天能健身,说明今天要取上一天健身或者休息的中较小的dp[1][i] = min(dp[0][i - 1], dp[2][i - 1]);}else{//昨天不能健身,但是今天还要工作,说明昨天只是休息了dp[1][i] = dp[0][i - 1];}}else{//今天不能工作,不符合定义,设置为最大值ndp[1][i] = n;}/*讨论今天能不能健身的情况*/if (canfitness[i]){if (canwork[i - 1]){dp[2][i] = min(dp[0][i - 1], dp[1][i - 1]);}else{dp[2][i] = dp[0][i - 1];}}else{dp[2][i] = n;}/*讨论今天休息的情况,无论昨天干了什么都能休息*/dp[0][i] = mymin(dp[0][i - 1], dp[1][i - 1], dp[2][i - 1]) + 1;}cout<< mymin(dp[0][n - 1], dp[1][n - 1], dp[2][n - 1])<<endl;system("pause");return 0;
}

自己菜还是要多总结多进步。一般来说,带有状态转移的动态规划,一般会以最后一步的状态作为区分,来进行状态转移。这里面也是如此,设置dp[1][i],第一维度是最后一天确定干了什么东西的条件下来进行分析。

腾讯校园招聘笔试 2019-8-17 第五题相关推荐

  1. 2012腾讯校园招聘笔试成都站回忆版

    腾讯的笔试题目比较基础 具体的题目记不清除了,设计到的知识点: 1.c语言基础:sizeof,strlen的用法. 2.linux基本命令umask 3.SQL语言 4.数据结构的知识,建立二叉树,顺 ...

  2. 腾讯校园招聘笔试 2019-8-17 第四题 另一种解法

    之前在博客https://blog.csdn.net/hanzhen7541/article/details/99710954中我们讨论了一种单调栈的解法,复杂度是O(nlogn).那么实际上还有一种 ...

  3. 腾讯校园招聘笔试 2019-8-17 第四题

    小Q在周末的时候和他的小伙伴来到大城市逛街,一条步行街上有很多高楼,共有n座高楼排成一行. 小Q从第一栋一直走到了最后一栋,小Q从来没有看到过这么多高楼,所以他想知道他在每栋楼的位置处能看到多少栋楼呢 ...

  4. 腾讯校园招聘笔试 2019-8-17 第三题

    小Q在进行一场竞技游戏,这场游戏的胜负关键就在于能够能争夺一条长度为L的河道,即可以看作是[0,L]的一条数轴. 这款竞技游戏当中有n个可以提供视野的道具-真视守卫,第i个真视守卫能够覆盖区间[xi, ...

  5. [历年IT笔试题]2014腾讯校园招聘笔试试题

  6. 2011深信服校园招聘笔试面试

    http://blog.sina.com.cn/s/blog_48c9576b0100me1y.html 9月26号深信服校园招聘笔试 都说深信服的题又偏又难,果然不假.不过还有有很多值得多思考的题. ...

  7. 腾讯实习生招聘笔试题目

    2013腾讯实习生笔试题  一. 单项选择题 1) 给定3个int类型的正整数x,y,z,对如下4组表达式判断正确的选项() Int a1=x+y-z; int b1=x*y/z; Int a2=x- ...

  8. 百度2014校园招聘笔试面试汇总

    目 录 1. 百度笔试 2 1.1百度2014校园招聘笔试题(成都站,软件研发岗) 2 1.2  2013百度校园招聘-机器学习和数据挖掘工程师-笔试题 7 1.3  百度2014校园招聘 技术研发题 ...

  9. 九度OJ 1525 子串逆序打印 -- 2012年Google校园招聘笔试题目

    题目地址:http://ac.jobdu.com/problem.php?pid=1525 题目描述: 小明手中有很多字符串卡片,每个字符串中都包含有多个连续的空格,而且这些卡片在印刷的过程中将字符串 ...

最新文章

  1. Java并发:明白Synchronized实现原理,锁什么?
  2. 网络推广营销浅析网站度过“沙盒期”后,为什么还不收录?
  3. 织梦dedecms dede plus文件作用介绍及安全设置
  4. MySQL中如何约束和排序数据
  5. 【论文】引用格式 NoteExpress管理文献
  6. 正则表达式不包含某个字符串_JMeter必知必会系列(18) JMeter正则表达式提取器疑难分析...
  7. python数学表达式3+(a+b)2_python3的基础学习之数学(2)
  8. CentOS7的/tmp目录自动清理规则(转)
  9. 荣耀play4 pro怎么升级鸿蒙系统,华为鸿蒙系统手机型号有哪些
  10. 【C语言】str类与men库函数的实现(如:strcpy,strcmp,strstr,strcat,memmove,memcpy)
  11. python多线程同步与互斥_python多线程编程(3): 使用互斥锁同步线程
  12. php找出函数定义位置,WordPress如何快速定位PHP函数所在文件位置及代码行号?
  13. 胡润发布《2019胡润80后白手起家富豪榜》:拼多多黄峥1350亿第一
  14. C++设计模式之Proxy模式(代理模式)
  15. python在线编程免费课程-Python少儿基础编程课程
  16. connect()在UDP连接中的应用一例
  17. 03-15 捍卫WAF
  18. 蓝宝石rx470d原版bios_AMD又能开核?刷完BIOS后性能白给,这次血赚了
  19. 【备忘】老男孩IT教育_徐培成_大数据
  20. 新品发布 | 麒麟产业服务:麒麟云上产业园,打造数字新基建

热门文章

  1. python教程推荐-入门python有什么好的书籍推荐?
  2. 编程语言python入门-编程语言入门(以python为例)
  3. python初学者怎么入门-python怎么入门啊?
  4. python教程-Python教程
  5. python怎么读取excel-python怎么读取excel中的数值
  6. python自动化办公要学多久-基于python实现自动化办公学习笔记三
  7. python怎么将json文件转为xls文件_基于python实现把json数据转换成Excel表格
  8. idea中怎么新建vue项目_项目中使用vue-awesome-swiper
  9. c语言 条件 设a 3 b 4,2012年计算机等级二级C语言章节习题及答案(4)
  10. centos6.5 升级oracle 10.2.0.5.0,CentOS5上升级ORACLE到10.2.0.4时,检测操作系统失败的解决方法...