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

折腾了大半天刚把输入搞定,但是算法就想不明白了,一开始想隔一个拿一个,但是若输入序列为4,1,1,5,1,1的话如果隔一个拿一个最大是7,但是正确结果应该是9,想用动态规划也没搞定,求大神讲解下算法如何设计,多谢了~~~~#美团#
全部评论
输入输出怎么搞定,表示不会
点赞 回复 分享
发布于 2016-09-11 15:50
完全没注意到逗号,难怪不得一直没输出结果
点赞 回复 分享
发布于 2016-09-11 15:52
哎,dfs吧,,不过我没通过,真尼玛伤心
点赞 回复 分享
发布于 2016-09-11 15:53
我是用了两次动态规划,第一次初始条件是拿第一个红包,第二次的初始条件是不拿第一个红包。最后返回的是两次动态规划的最大值。。。
点赞 回复 分享
发布于 2016-09-11 15:53
当然是动态规划啦 leetcode house robII 原型
点赞 回复 分享
发布于 2016-09-11 15:54
dfs
点赞 回复 分享
发布于 2016-09-11 15:55
从第一个开始,判断是否大于左右,如果是,取该位置数加到总和中,并将其前后以及其本身置0,重复此过程,直到所有位置都置0. 不知道这个思路对不对
点赞 回复 分享
发布于 2016-09-11 16:00
leetcode题目,213道
点赞 回复 分享
发布于 2016-09-11 16:12
http://m.blog.csdn.net/article/details?id=50354130
点赞 回复 分享
发布于 2016-09-11 16:23
#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

相关推荐

mq2:我倒是觉得这种敞亮一点好。能接受就去不能就不去呗。 完了跟现在“正常”公司一样,hr说的天花乱坠,进去一看根本就是996核动力牛马,想走又没应届生身份了。岂不是更糟。
点赞 评论 收藏
分享
learYuan:🐕看了都摇头
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务