滴滴餐厅题思路

单纯听同学讲的题目,自己写了些但是没有OJ让我测试能不能AC;
就只说说思路,求大神指导。

动态规划+状态压缩
n个桌子,m个人;
dp定义为dp[m][2^n]
dp[i][j]中;
i表示第i个人
j表示的是一个压缩的状态,
展开成二进制,如
例题中3个桌子,5个人;
m = 2^5 = 32;
j取0~31, j = 31 表示 11111这个状态,
既每个位子都可以坐;
递推关系为:
dp[i][j] = max(dp[i-1][j - 2^index] + money[i],dp[i-1][j])
index表示选择的座位,减去2^index相当于从j中删除了2进制该位置的1;
桌子状态压缩成二进制后解决。
全部评论
内存不超?
点赞 回复 分享
发布于 2016-09-06 21:16
桌子范围10000
点赞 回复 分享
发布于 2016-09-06 21:20
就是贪心,优先选择金额最大并且能够坐下的
点赞 回复 分享
发布于 2016-09-08 12:31
把客人排序不就好了。。。首先按照金额排序,金额相同的按照人数排序,然后依次判断能不能坐下。当然桌子要先按照升序排序
点赞 回复 分享
发布于 2016-09-08 12:54
楼主你想多了,根据客人的消费金额排序就行了,不需要这么复杂的
点赞 回复 分享
发布于 2016-09-08 12:57
这道题严重体现了C++刷题的优越性,multimap真好用
点赞 回复 分享
发布于 2016-09-08 13:14

相关推荐

点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务