由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
JobHunting版 - 哪位大牛能给这题的正确答案吗?
相关主题
发面经问一道onsite算法
面试遇到老印,这算被黑了吗?有人做facebook的first or last这道题吗?
ebay skype interview面经(4轮)subset
请教一个fb面试问题忐忑的G电面
c语言里下划线开头的记号是什么意思?帮发一个同学面G家onsite的面经
电面题一个M家onsite面经
这题怎么做?发几个面经(7) Google 电面+onsite
请教如何解决整数的溢出问题Google,Facebook,Linkedin,Twitter面经
相关话题的讨论汇总
话题: out话题: cols话题: biginteger话题: max话题: len
进入JobHunting版参与讨论
1 (共1页)
R*****i
发帖数: 2126
1
CSDN上的编程挑战题。
http://hero.csdn.net/Question/Details?ID=610&ExamID=605
我的算法貌似不对,请问正确算法是神马?
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Numerics;
namespace GridWalk
{
class Program
{
static void Main(string[] args)
{
List nlist = new List();
string line = Console.ReadLine();
while (!string.IsNullOrEmpty(line))
{
nlist.Add(int.Parse(line));
line = Console.ReadLine();
}
foreach (int n in nlist)
{
Console.WriteLine(GridWalk.GetPathNumber(n));
}
}
}
public class GridWalk
{
const int MAX_LEN = 1001;
private static BigInteger[] in_in_out_out = new BigInteger[MAX_LEN];
private static BigInteger[] in_out_in_out = new BigInteger[MAX_LEN];
private static BigInteger[] in_out_out_in = new BigInteger[MAX_LEN];
private static BigInteger[] out_out_in_in = new BigInteger[MAX_LEN];
private static BigInteger[] out_in_out_in = new BigInteger[MAX_LEN];
private static BigInteger[] out_in_in_out = new BigInteger[MAX_LEN];
public static BigInteger GetPathNumber(int num)
{
if (num == 1)
{
return 2;
}
else if (num >=2)
{
in_in_out_out[2] = 4;
in_out_in_out[2] = 4;
in_out_out_in[2] = 4;
out_out_in_in[2] = 4;
out_in_out_in[2] = 4;
out_in_in_out[2] = 4;
}
for (int cols = 3; cols <= num; cols++)
{
in_in_out_out[cols] = 0;
in_out_in_out[cols] = 0;
in_out_out_in[cols] = 0;
out_out_in_in[cols] = 0;
out_in_out_in[cols] = 0;
out_in_in_out[cols] = 0;
//1. in_in_out_out
in_out_out_in[cols] += in_in_out_out[cols - 1] * 2;
in_in_out_out[cols] += in_in_out_out[cols - 1] * 2;
in_out_in_out[cols] += in_in_out_out[cols - 1] * 2;
//2. in_out_in_out
in_in_out_out[cols] += in_out_in_out[cols - 1] * 2;
//3. in_out_out_in
in_out_out_in[cols] += in_out_out_in[cols - 1] * 2;
//4. out_out_in_in
out_out_in_in[cols] += out_out_in_in[cols - 1] * 2;
out_in_out_in[cols] += out_out_in_in[cols - 1] * 2;
in_out_out_in[cols] += out_out_in_in[cols - 1] * 2;
//5. out_in_out_in
out_out_in_in[cols] += out_in_out_in[cols - 1] * 2;
//6. out_in_in_out
out_in_in_out[cols] += out_in_in_out[cols - 1] * 2;
out_out_in_in[cols] += out_in_in_out[cols - 1] * 2;
in_in_out_out[cols] += out_in_in_out[cols - 1] * 2;
}

return in_in_out_out[num] + in_out_in_out[num] + in_out_out_in[
num]
+ out_out_in_in[num] + out_in_out_in[num] + out_in_in_out[
num];
}
}
}
h*******e
发帖数: 1377
2
记得是一种很复杂很复杂的dp。
我做出过不带对角线的哈密尔顿路条数,这个应该类似那道题。
A*****i
发帖数: 3587
3
这是我见过最难的DP,等高人吧
l*********8
发帖数: 4642
4
my 2 cents:
in[k]: k列棋盘时,从最后一列开始的哈密尔顿路的数目
inout[k]: k列棋盘时,从最后一列开始且回到最后一列的哈密尔顿路的数目
inout[0] = 1;
inout[1] = 2;
in[0] = 1;
in[1] = 2;
inout[k] = 2*inout[k-1];
in[k] = 2*in[k-1] + 2*inout[k-1] + 4*inout[k-2];
最终答案:
count[n] = 2*in[n] + sum(4*inout[i]*in[n-i-1] | 1<=i<=n-2)

【在 R*****i 的大作中提到】
: CSDN上的编程挑战题。
: http://hero.csdn.net/Question/Details?ID=610&ExamID=605
: 我的算法貌似不对,请问正确算法是神马?
: using System;
: using System.Collections.Generic;
: using System.Linq;
: using System.Text;
: using System.Numerics;
: namespace GridWalk
: {

R*****i
发帖数: 2126
5
我的算法不知道究竟错在哪里. 题目只给出了1,2,3的答案, 所以无法验证我的算法.
我的算法是, 不在最外面的是里, 最外面的是外, 一共有6种case,
里-里-外-外
里-外-里-外
里-外-外-里
外-外-里-里
外-里-外-里
外-里-里-外
然后再添加一列的情况,
里-里-外-外 --> 里-里-外-外, 里-外-外-里, 里-外-里-外, 每一种都是2倍
里-外-里-外 --> 里-里-外-外, 2倍
里-外-外-里 --> 里-外-外-里, 2倍
外-外-里-里 --> 外-外-里-里, 外-里-外-里, 里-外-外-里, 每一种都是2倍
外-里-外-里 --> 外-外-里-里, 2倍
外-里-里-外 --> 外-里-里-外, 外-外-里-里, 里-里-外-外, 每一种都是2倍
h*******e
发帖数: 1377
6
我做得是四行N列的~~~2行N列似乎不那么难,教你个方法,自己找错,自己写测试数据
, 1, 2, 3, 。。。10 的情况之后写个暴搜比对,之后你差不多就能发现错误的数
据了。然后带进去查找程序错误。

【在 R*****i 的大作中提到】
: 我的算法不知道究竟错在哪里. 题目只给出了1,2,3的答案, 所以无法验证我的算法.
: 我的算法是, 不在最外面的是里, 最外面的是外, 一共有6种case,
: 里-里-外-外
: 里-外-里-外
: 里-外-外-里
: 外-外-里-里
: 外-里-外-里
: 外-里-里-外
: 然后再添加一列的情况,
: 里-里-外-外 --> 里-里-外-外, 里-外-外-里, 里-外-里-外, 每一种都是2倍

R*****i
发帖数: 2126
7
谢谢楼上的建议, 刚试了一下暴搜, 4列的时候我的算法结果也是对的, 是416.
l*********8
发帖数: 4642
8
难道你没有mod (10^9 + 7)

【在 R*****i 的大作中提到】
: 谢谢楼上的建议, 刚试了一下暴搜, 4列的时候我的算法结果也是对的, 是416.
R*****i
发帖数: 2126
9

噢, 没看懂那是啥意思, 直接输出大数了.

【在 l*********8 的大作中提到】
: 难道你没有mod (10^9 + 7)
R*****i
发帖数: 2126
10

靠, 还真是的. 妈乐个八字, 我TM当时就没看明白最后一句.

【在 l*********8 的大作中提到】
: 难道你没有mod (10^9 + 7)
l*********8
发帖数: 4642
11
刚才测试了一下,我的算法也是正确的。
贴个小数据版的程序(没加mod)
int solveSmall(int n) {
if (n < 1) return 0;
vector in(n+1), inout(n+1);
inout[0] = 1, inout[1] = 2;
in[0] = 1, in[1] = 2;
for (int k=2; k<=n; ++k) {
inout[k] = 2 * inout[k-1];
in[k] = inout[k] + 2 * in[k-1] + 4 * in[k-2];
}
int count = min(2, n) * in[n];
for (int i=1; i<=n-2; ++i)
count += 4 * inout[i] * in[n-i-1];
return count;
}
M*******a
发帖数: 1633
12
这肯定指数级别了阿,还要DP干吗。
1 (共1页)
进入JobHunting版参与讨论
相关主题
Google,Facebook,Linkedin,Twitter面经c语言里下划线开头的记号是什么意思?
L家和G家的几道面试题不懂电面题一个
有人做过twitter的online coding test么?什么类型什么难度的题目啊?这题怎么做?
大整数相乘谁贴个bug free的code请教如何解决整数的溢出问题
发面经问一道onsite算法
面试遇到老印,这算被黑了吗?有人做facebook的first or last这道题吗?
ebay skype interview面经(4轮)subset
请教一个fb面试问题忐忑的G电面
相关话题的讨论汇总
话题: out话题: cols话题: biginteger话题: max话题: len