Olympiad in Informatics Beginners' Home's Archiver

cxh 发表于 2008-11-19 01:30 PM

NOIP第三题N^4的DP复测会不会出问题?

[i=s] 本帖最后由 cxh 于 2008-12-2 12:16 PM 编辑 [/i]

福建的省测是330,但我第三题用的是N^4的dp,这几天我一直担心会不会是福建的机器太好了,放到北京就挂了。请问各位有没有用这种dp的,用它复测时会不会出问题?


晕死,还是超了,最后320,奇怪的是福建其他人用N^50还是100,大概人品不好吧......

winsty 发表于 2008-11-19 01:48 PM

范围是50的话 有点危险...

panfei25 发表于 2008-11-19 01:52 PM

山东的,也是。
50^4=6250000
3000^2=9000000
3000的数据应n2没问题吧?

xieyanan 发表于 2008-11-19 02:04 PM

我要告诉楼主一个好消息。。。
我是n^5的算法。。。
估计最大点是0.3~0.4s

faintzw 发表于 2008-11-19 02:05 PM

晕。。能做到5次方可是需要实力的阿。。

4次肯定可以的。

Moin 发表于 2008-11-19 03:13 PM

我N^4 没加任何剪枝最慢的一个点是0.85
但全国复测的机器比我们这还要好些~
所以应该不会超的~

__gxx 发表于 2008-11-19 05:27 PM

- - 写费用流的飘过。

goleenuoer 发表于 2008-11-19 05:56 PM

不会

churchill 发表于 2008-11-19 08:28 PM

var
a:array[0..50,0..50]of longint;
f:array[0..50,0..50,0..50,0..50]of longint;
i,j,i2,j2,n,m:longint;
begin
assign(input,'message.in');
assign(output,'message.out');
reset(input);
rewrite(output);
readln(m,n);
for i:=1 to m do
  begin
   for j:=1 to n do
    read(a[i,j]);
   readln;
  end;
for i:=1 to m do
  for j:=1 to n do
   for i2:=1 to m do
    for j2:=1 to n do
     if ((i<>i2)and(j<>j2))or((i=m)and(i2=m)and(j=n)and(j2=n))
     then begin
          if i<>i2-1
          then if f[i,j-1,i2-1,j2]+a[i,j-1]+a[i2-1,j2]>f[i,j,i2,j2]
          then f[i,j,i2,j2]:=f[i,j-1,i2-1,j2]+a[i,j-1]+a[i2-1,j2];
          if i-1<>i2-1
          then if f[i-1,j,i2-1,j2]+a[i-1,j]+a[i2-1,j2]>f[i,j,i2,j2]
          then f[i,j,i2,j2]:=f[i-1,j,i2-1,j2]+a[i-1,j]+a[i2-1,j2];
          if j<>j2-1
          then if f[i-1,j,i2,j2-1]+a[i-1,j]+a[i2,j2-1]>f[i,j,i2,j2]
          then f[i,j,i2,j2]:=f[i-1,j,i2,j2-1]+a[i-1,j]+a[i2,j2-1];
          if j-1<>j2-1
          then if f[i,j-1,i2,j2-1]+a[i,j-1]+a[i2,j2-1]>f[i,j,i2,j2]
          then f[i,j,i2,j2]:=f[i,j-1,i2,j2-1]+a[i,j-1]+a[i2,j2-1];
     end;
  writeln(f[m,n,m,n]);
close(input);
close(output);
end.


暴力的n^4,没问题的

macaroniz 发表于 2008-11-19 09:20 PM

我的n^3logn的=。=

战无敌 发表于 2008-11-19 09:29 PM

4次怎么可能超……

能量项链写成100^4方的都100

不要说这题n最大就50了

cxh 发表于 2008-11-19 10:48 PM

心里还是没底...

satily 发表于 2008-11-19 11:09 PM

[quote]我的n^3logn的=。=
[size=2][color=#999999]macaroniz 发表于 2008-11-19 21:20[/color] [url=http://www.oibh.org/bbs/redirect.php?goto=findpost&pid=321171&ptid=27210][img]http://www.oibh.org/bbs/images/common/back.gif[/img][/url][/size][/quote]
偶O(N^3)的~~~还米优化~~~=。=

FeeOO 发表于 2008-11-20 11:49 AM

递推写了个(m+n)*n*n/2,然后加了范围剪枝。
预计在0.1s.
N^4预计在0.6s
一般来说,10^7是可以承受的。
50^4=6.25*10^6,可以说是完全没有问题。

cxh 发表于 2008-11-20 12:10 PM

关键是四重循环内部还有四个方向递推式的复杂度,难以保证暴力n^4里面的递推就是O(1)的时间....

xieyanan 发表于 2008-11-20 01:13 PM

var
  f,s:array[0..50,0..50,0..50]of longint;
  a:array[0..50,0..50]of longint;
  i,j,k,m,n,l,p,ans:longint;
begin
  readln(m,n);
  for i:=1 to m do
    for j:=1 to n do
      read(a[i,j]);
  for k:=1 to n do
    for i:=1 to m do
      for j:=i to m do
        s[k,i,j]:=s[k,i,j-1]+a[j,k];
  for k:=1 to n do
    for i:=1 to m do
      for j:=i+1 to m do
        for l:=1 to i do
          for p:=i+1 to j do
          if f[k,i,j]<f[k-1,l,p]+s[k,l,i]+s[k,p,j] then
            f[k,i,j]:=f[k-1,l,p]+s[k,l,i]+s[k,p,j];
  writeln(f[n,m-1,m]);
end.

Culture 发表于 2008-11-20 01:46 PM

同样的O(n[sup]4[/sup]),其实记忆化搜索更好实现。而且据我的程序看,还快一点。

ykj163 发表于 2008-11-20 02:15 PM

送到北京的超时都被改成不超时的了

emanon 发表于 2008-11-20 02:31 PM

估计我什么机器都超不了...
看错题了  骗分写了个n^2的贪心.....

churchill 发表于 2008-11-20 06:34 PM

ls很强大

页: [1] 2


Powered by Discuz! Archiver 7.0.0  © 2001-2009 Comsenz Inc.