Redian新闻
>
请教:iheart上提供的pdf格式的胖子能用吗?
avatar
请教:iheart上提供的pdf格式的胖子能用吗?# PennySaver - 省钱一族
R*i
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];
}
}
}
avatar
a*w
2
还是两张卡并存,只是Amex的没有2% reward了?
avatar
I*o
3
他放上去应该是可以给别人用的,不过那不就等同复印了吗?
avatar
h*e
4
记得是一种很复杂很复杂的dp。
我做出过不带对角线的哈密尔顿路条数,这个应该类似那道题。
avatar
t*u
5
d
avatar
L*J
6
jtss 什么东西的胖子
avatar
A*i
7
这是我见过最难的DP,等高人吧
avatar
z*1
8
cvs的不能,对卡的,你的卡没收到用的话会beep。
avatar
l*8
9
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
: {

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

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

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

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

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

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

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

【在 l*********8 的大作中提到】
: 难道你没有mod (10^9 + 7)
avatar
l*8
16
刚才测试了一下,我的算法也是正确的。
贴个小数据版的程序(没加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;
}
avatar
M*a
17
这肯定指数级别了阿,还要DP干吗。
相关阅读
logo
联系我们隐私协议©2024 redian.news
Redian新闻
Redian.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Redian.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。