美团笔试 拿红包 算法如何设计

折腾了大半天刚把输入搞定,但是算法就想不明白了,一开始想隔一个拿一个,但是若输入序列为4,1,1,5,1,1的话如果隔一个拿一个最大是7,但是正确结果应该是9,想用动态规划也没搞定,求大神讲解下算法如何设计,多谢了~~~~#美团#
全部评论
#include <stdio.h> #include <stdlib.h> #define N 100 int value = 0; int max = 0; void dfs(int price[2][N],int start,int length){     if(start == length){         max = max > value ? max : value;     }     else{         int i;         for(i = start ; i < length ;i++){             if(!price[1][(i + length - 1)%length] && !price[1][(i+length+1)%length]){                 value += price[0][i];                 price[1][i] = 1;                 dfs(price,i+1,length);                 value -= price[0][i];                 price[1][i] = 0;             }else{                 dfs(price,i+1,length);             }         }     } } int main(void){     int price[2][N]={{1,2,4,9,2,3,4,5}};     dfs(price,0,8);     printf("%d",max);     return 0; } 类似与这样的DFS吧 有错欢迎指出~~·
点赞 回复 分享
发布于 2016-09-11 16:38
http://m.blog.csdn.net/article/details?id=50354130
点赞 回复 分享
发布于 2016-09-11 16:23
leetcode题目,213道
点赞 回复 分享
发布于 2016-09-11 16:12
从第一个开始,判断是否大于左右,如果是,取该位置数加到总和中,并将其前后以及其本身置0,重复此过程,直到所有位置都置0. 不知道这个思路对不对
点赞 回复 分享
发布于 2016-09-11 16:00
dfs
点赞 回复 分享
发布于 2016-09-11 15:55
当然是动态规划啦 leetcode house robII 原型
点赞 回复 分享
发布于 2016-09-11 15:54
我是用了两次动态规划,第一次初始条件是拿第一个红包,第二次的初始条件是不拿第一个红包。最后返回的是两次动态规划的最大值。。。
点赞 回复 分享
发布于 2016-09-11 15:53
哎,dfs吧,,不过我没通过,真尼玛伤心
点赞 回复 分享
发布于 2016-09-11 15:53
完全没注意到逗号,难怪不得一直没输出结果
点赞 回复 分享
发布于 2016-09-11 15:52
输入输出怎么搞定,表示不会
点赞 回复 分享
发布于 2016-09-11 15:50

相关推荐

最喜欢秋天的火龙果很...:第一份工作一定要往大的去,工资低点没事。后面换工作会更好找,即使你去小公司,你也不可能不会换工作的。所以找大的去
点赞 评论 收藏
分享
03-03 23:12
已编辑
北京邮电大学 Java
书海为家:我来给一点点小建议,因为毕竟还在学校不像工作几年的老鸟有丰富的项目经验,面试官在面试在校生的时候更关注咱们同学的做事逻辑和思路,所以最好在简历中描述下自己做过项目的完整过程,比如需求怎么来的,你对需求的解读,你想到的解决办法,遇到困难如何找人求助,最终项目做成了什么程度,你从中收获了哪些技能,你有什么感悟。
你的简历改到第几版了
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务