楼主: caseinter
跳转到指定楼层
上一主题 下一主题
收起左侧

GOOGLE ONSITE一道最近高频DP

 
🔗
freshyogurt 2017-3-20 04:50:07 | 只看该作者
全局:
csehao 发表于 2017-2-27 15:01
感觉不需要3唯DP吧, 因为不需要考虑O, 正常出席, int[][] DP = new int[3][2]; 第一维以当前为结尾, 已经连 ...

同意。可以创建两个二维数组。一个存i-1的状态,另一个存当前的,最后把当前的赋值给i-1。
回复

使用道具 举报

🔗
freshyogurt 2017-3-20 05:05:07 | 只看该作者
全局:
您好!
本帖隐藏的内容需要积分高于 100 才可浏览
您当前积分为 0。
使用VIP即刻解锁阅读权限或查看其他获取积分的方式
游客,您好!
本帖隐藏的内容需要积分高于 100 才可浏览
您当前积分为 0。
VIP即刻解锁阅读权限查看其他获取积分的方式
Unlock interview details and practice with AI
Curated Interview Questions from Top Companies
回复

使用道具 举报

🔗
bigbearlake 2017-3-26 04:17:56 | 只看该作者
全局:

太聪明了!先不考虑'A'
回复

使用道具 举报

🔗
bigbearlake 2017-3-26 04:38:02 | 只看该作者
全局:
Java version
  1. public class RewardStudent {

  2.     public static void main(String[] args) {
  3.         System.out.println(count(4));
  4.     }

  5.     public static int count(int n) {
  6.         int[][] dp = new int[n + 1][2];
  7.         dp[1][0] = 1;
  8.         dp[1][1] = 1;
  9.         for (int i = 2; i <= n; i++) {
  10.             dp[i][0] = dp[i - 1][0] + dp[i - 1][1];
  11.             if (i == 2) {
  12.                 dp[i][1] = dp[i - 1][0] + dp[i - 1][1];
  13.             } else {
  14.                 dp[i][1] = dp[i - 1][0] + dp[i - 2][0];
  15.             }
  16.         }

  17.         int res = dp[n][0] + dp[n][1];
  18.         for (int i = 0; i < n; i++) {
  19.             res += (dp[i][0] + dp[i][1]) * (dp[n - i - 1][0] + dp[n - i - 1][1]);
  20.         }

  21.         return res;
  22.     }
  23. }
复制代码
回复

使用道具 举报

🔗
jedihy 2017-3-26 06:12:27 | 只看该作者
全局:
  1. '''
  2. dp[i][0] stands for # of string whose length is i ends with O
  3. dp[i][1] stands for # of string whose length is i ends with A
  4. dp[i][2] stands for # of string whose length is i ends with L
  5. '''

  6. def numOfRewardable(self, n):
  7.         dp = [[0, 0, 0] for i in range(max(4, n + 1))]
  8.         dp[1] = [1, 1, 1]
  9.         dp[2] = [3, 2, 3]
  10.         dp[3] = [7, 4, 8]

  11.         for i in range(4, n + 1):
  12.             dp[i][2] = sum(dp[i - 1])
  13.             # ends up with O
  14.             dp[i][1] = dp[i - 1][1] + dp[i - 2][1] + dp[i - 3][1]
  15.             # ends up with A
  16.             # replace M[i-1][1]'s last A with O
  17.             # replace M[i-2][1]'s last A with O and insert L after that
  18.             # replace M[i-3][1]'s last A with O and insert LL after that
  19.             dp[i][0] = dp[i][2] - (dp[i - 3][1] + dp[i - 3][2])
  20.             # ends up with L
  21.             # ___ALL + L and ___OLL + L cases that cause invalid string have been counted
  22.             # in M[i][2] (i.e sum(M[i-1]))
  23.             # then drop them by reducing M[i-3][1] + M[i-3][2]
  24.             # note that LLL + L won't be counted in M[i][2] because of LLL is already illegal
  25.         return sum(dp[n])
复制代码


我的代码,经测试和DFS结果一致。
回复

使用道具 举报

🔗
zhouyoung1124 2017-7-31 04:48:31 | 只看该作者
全局:
这题用DP感觉毫无意义
回复

使用道具 举报

🔗
kqxqx 2017-10-9 05:20:52 | 只看该作者
全局:
李特口德 唔唔耳
回复

使用道具 举报

🔗
agraynel 2017-10-10 08:47:50 | 只看该作者
全局:
kqxqx 发表于 2017-10-9 05:20
李特口德 唔唔耳

寒假的时候lc只有490题。。哈哈
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册账号
隐私提醒:
  • ☑ 禁止发布广告,拉群,贴个人联系方式:找人请去🔗同学同事飞友,拉群请去🔗拉群结伴,广告请去🔗跳蚤市场,和 🔗租房广告|找室友
  • ☑ 论坛内容在发帖 30 分钟内可以编辑,过后则不能删帖。为防止被骚扰甚至人肉,不要公开留微信等联系方式,如有需求请以论坛私信方式发送。
  • ☑ 干货版块可免费使用 🔗超级匿名:面经(美国面经、中国面经、数科面经、PM面经),抖包袱(美国、中国)和录取汇报、定位选校版
  • ☑ 查阅全站 🔗各种匿名方法

本版积分规则

>
快速回复 返回顶部 返回列表