由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
JobHunting版 - 各位大牛,这题写代码的话你们要多久
相关主题
请教一个算法白板代码,支持O(1)时间GetMin的stack
只有5天的话你是选择做题还是看算法书?请教个编程题,比较急,坐等
这题怎么做?算法题:min heap inplace变 BST
王垠被炒了? (转载)有人面了Amazon Intern的吗
问一道面试题目这道题目有什么想法
关于dp的一点困惑对一些烂大街了的面试题, 要注意伪装
请教将任意递归问题转换为尾递归的方法Google, Facebook, Rocket Fuel面经及经验总结
谈谈面试中化归的思想分享一些自己面过的面筋
相关话题的讨论汇总
话题: opt话题: card话题: 牌面话题: 14话题: 出掉
进入JobHunting版参与讨论
1 (共1页)
f*******4
发帖数: 64
1
手里14张牌,牌面A~N,可能有重复.出牌规则是:
* 2,3,4张同样牌面
* 3张顺子
* A可以作任何牌使用
实现函数,返回全出掉的最少次数:
int Discard(const string &s); // assert(s.size()==14), 无法出掉返回-1
如"A,B,C,D,D,D,D,E,F,G,H,I,J,N"一种出法是
[B,C,D] [D,D,D] [E,F,G] [H,I,J] [A,N]
f****e
发帖数: 34
2
动态规划?一共就2^14状态。
用记忆化搜索,程序应该不难写。

【在 f*******4 的大作中提到】
: 手里14张牌,牌面A~N,可能有重复.出牌规则是:
: * 2,3,4张同样牌面
: * 3张顺子
: * A可以作任何牌使用
: 实现函数,返回全出掉的最少次数:
: int Discard(const string &s); // assert(s.size()==14), 无法出掉返回-1
: 如"A,B,C,D,D,D,D,E,F,G,H,I,J,N"一种出法是
: [B,C,D] [D,D,D] [E,F,G] [H,I,J] [A,N]

k***7
发帖数: 6
3
string先排序,统计'A'出现的个数记为K,构建一个二维数组opt[K][14-K]
最优子结构为
opt[i][j] = {
//same cards
s[j]==s[j-1]?opt[i][j-2]:-1,
s[j]==s[j-1]&&s[j]==s[j-2]?opt[i][j-3]:-1,
s[j]==s[j-1]&&s[j]==s[j-2]&&s[j]==s[j-3]?opt[i][j-4]:-1,
//sequence
s[j]==s[j-1]+1&&s[j]==s[j-2]+2?opt[i][j-3]:-1,
//use 'A' card as same card
opt[i-1][j-1],
opt[i-2][j-1],
opt[i-3][j-1],
opt[i-4][j-1],
//use 'A' card as sequence
s[j]==s[j-1]+1||s[j]==s[j-1]+1?opt[i-1][j-2]:-1, //1 'A'
opt[i-2][j-1]// 2'A'
} => filter(-1) => getMin
opt[i][j] = -1 if (i + j<2)
B*****g
发帖数: 34098
4
就会递归,哈哈

【在 f*******4 的大作中提到】
: 手里14张牌,牌面A~N,可能有重复.出牌规则是:
: * 2,3,4张同样牌面
: * 3张顺子
: * A可以作任何牌使用
: 实现函数,返回全出掉的最少次数:
: int Discard(const string &s); // assert(s.size()==14), 无法出掉返回-1
: 如"A,B,C,D,D,D,D,E,F,G,H,I,J,N"一种出法是
: [B,C,D] [D,D,D] [E,F,G] [H,I,J] [A,N]

l*****t
发帖数: 2019
5
看得我满脑子pattern matching加递归。我得写上个一整天。

【在 f*******4 的大作中提到】
: 手里14张牌,牌面A~N,可能有重复.出牌规则是:
: * 2,3,4张同样牌面
: * 3张顺子
: * A可以作任何牌使用
: 实现函数,返回全出掉的最少次数:
: int Discard(const string &s); // assert(s.size()==14), 无法出掉返回-1
: 如"A,B,C,D,D,D,D,E,F,G,H,I,J,N"一种出法是
: [B,C,D] [D,D,D] [E,F,G] [H,I,J] [A,N]

B*****g
发帖数: 34098
6
大牛不可能用一天吧?

【在 l*****t 的大作中提到】
: 看得我满脑子pattern matching加递归。我得写上个一整天。
s*****r
发帖数: 108
7
DP 就好了
f*******4
发帖数: 64
8
不明觉厉

【在 f****e 的大作中提到】
: 动态规划?一共就2^14状态。
: 用记忆化搜索,程序应该不难写。

f*******4
发帖数: 64
9
想了想,觉得很厉害

【在 k***7 的大作中提到】
: string先排序,统计'A'出现的个数记为K,构建一个二维数组opt[K][14-K]
: 最优子结构为
: opt[i][j] = {
: //same cards
: s[j]==s[j-1]?opt[i][j-2]:-1,
: s[j]==s[j-1]&&s[j]==s[j-2]?opt[i][j-3]:-1,
: s[j]==s[j-1]&&s[j]==s[j-2]&&s[j]==s[j-3]?opt[i][j-4]:-1,
: //sequence
: s[j]==s[j-1]+1&&s[j]==s[j-2]+2?opt[i][j-3]:-1,
: //use 'A' card as same card

m*****n
发帖数: 204
10
DP, 15 min using top-down approach (memorization)

【在 f*******4 的大作中提到】
: 手里14张牌,牌面A~N,可能有重复.出牌规则是:
: * 2,3,4张同样牌面
: * 3张顺子
: * A可以作任何牌使用
: 实现函数,返回全出掉的最少次数:
: int Discard(const string &s); // assert(s.size()==14), 无法出掉返回-1
: 如"A,B,C,D,D,D,D,E,F,G,H,I,J,N"一种出法是
: [B,C,D] [D,D,D] [E,F,G] [H,I,J] [A,N]

x***y
发帖数: 633
11
Convert this to a graph problem by using a node for a set of cards, and a
directed edge between 2 nodes if the first set of cards can be transformed
to 2nd set by playing the card once.
Then, this is a Dijkstra problem.
1 (共1页)
进入JobHunting版参与讨论
相关主题
分享一些自己面过的面筋问一道面试题目
minstack不是吧?我的这么简单的leetcode code怎么也memory limit exceeded?关于dp的一点困惑
怎么结果就不对呢请教将任意递归问题转换为尾递归的方法
Leetcode Min Stack问题谈谈面试中化归的思想
请教一个算法白板代码,支持O(1)时间GetMin的stack
只有5天的话你是选择做题还是看算法书?请教个编程题,比较急,坐等
这题怎么做?算法题:min heap inplace变 BST
王垠被炒了? (转载)有人面了Amazon Intern的吗
相关话题的讨论汇总
话题: opt话题: card话题: 牌面话题: 14话题: 出掉