108 条题解
-
0mrain LV 7 @ 2008-10-01 11:05:32
├ 测试数据 01:答案正确... 0ms
├ 测试数据 02:答案正确... 0ms
├ 测试数据 03:答案正确... 0ms
├ 测试数据 04:答案正确... 0ms
├ 测试数据 05:答案正确... 0ms
├ 测试数据 06:答案正确... 0ms
├ 测试数据 07:答案正确... 0ms
├ 测试数据 08:答案正确... 0ms
├ 测试数据 09:答案正确... 0ms
├ 测试数据 10:答案正确... 0ms
├ 测试数据 11:答案正确... 0ms
├ 测试数据 12:答案正确... 0ms
├ 测试数据 13:答案正确... 0ms
├ 测试数据 14:答案正确... 0ms
├ 测试数据 15:答案正确... 0ms
├ 测试数据 16:答案正确... 0ms
├ 测试数据 17:答案正确... 0ms
├ 测试数据 18:答案正确... 0ms
├ 测试数据 19:答案正确... 0ms
├ 测试数据 20:答案正确... 0ms我也用搜的...搜索万岁~
最后感叹下数据太弱了..
-
02008-10-01 08:48:22@
编译通过...
├ 测试数据 01:答案正确... 0ms
├ 测试数据 02:答案正确... 0ms
├ 测试数据 03:答案正确... 0ms
├ 测试数据 04:答案正确... 0ms
├ 测试数据 05:答案正确... 0ms
├ 测试数据 06:答案正确... 0ms
├ 测试数据 07:答案正确... 0ms
├ 测试数据 08:答案正确... 0ms
├ 测试数据 09:答案正确... 0ms
├ 测试数据 10:答案正确... 0ms
├ 测试数据 11:答案正确... 0ms
├ 测试数据 12:答案正确... 0ms
├ 测试数据 13:答案正确... 0ms
├ 测试数据 14:答案正确... 0ms
├ 测试数据 15:答案正确... 0ms
├ 测试数据 16:答案正确... 0ms
├ 测试数据 17:答案正确... 0ms
├ 测试数据 18:答案正确... 0ms
├ 测试数据 19:答案正确... 25ms
├ 测试数据 20:答案正确... 0ms
---|---|---|---|---|---|---|---|-
Accepted 有效得分:100 有效耗时:25ms搜的,好像比状态压缩的dp还快
-
02008-09-30 21:49:54@
.....ouio
-
02008-09-21 13:56:48@
地下室
-
02008-09-21 13:56:00@
地板
-
02008-09-21 08:56:09@
divano
-
-12009-11-07 21:15:12@
cheat...
-
-12009-11-06 18:49:57@
编译通过...
├ 测试数据 01:答案正确... 0ms
├ 测试数据 02:答案正确... 0ms
├ 测试数据 03:答案正确... 0ms
├ 测试数据 04:答案正确... 0ms
├ 测试数据 05:答案正确... 0ms
├ 测试数据 06:答案正确... 0ms
├ 测试数据 07:答案正确... 0ms
├ 测试数据 08:答案正确... 0ms
├ 测试数据 09:答案正确... 0ms
├ 测试数据 10:答案正确... 0ms
├ 测试数据 11:答案正确... 0ms
├ 测试数据 12:答案正确... 0ms
├ 测试数据 13:答案正确... 0ms
├ 测试数据 14:答案正确... 0ms
├ 测试数据 15:答案正确... 0ms
├ 测试数据 16:答案正确... 0ms
├ 测试数据 17:答案正确... 0ms
├ 测试数据 18:答案正确... 0ms
├ 测试数据 19:答案正确... 0ms
├ 测试数据 20:答案正确... 0ms
---|---|---|---|---|---|---|---|-
Accepted 有效得分:100 有效耗时:0ms呼呼秒了,,
方程F[k,i,j]:=max{F[k-1,i,t]+map[t,j],F[k-1,t,j]+map},,
要加一个G[k,i,j]存一个当前的路径,来判断下一步是否符合要求咯.
判断的时候只需要and一下就可以了~~ 位运算真奇妙...program vijos1456;const maxnum=99999999;var g,f:array[1..20,1..20,1..20]of longint; map:array[1..20,1..20]of longint; min,n,i,j,k,t,temp1,temp2:longint;begin readln(n); for i:=1 to n do for j:=1 to n do read(map); for i:=1 to n do for j:=1 to n do for k:=1 to n do f:=maxnum; for i:=1 to n do f[1,i,i]:=0; for i:=1 to n do for j:=1 to n do if ij then begin f[2,i,j]:=map; g[2,i,j]:=1 shl (i-1)+1 shl (j-1); end; for k:=3 to n do for i:=1 to n do for j:=1 to n do if ij then for t:=1 to n do if (it)and(jt) then begin temp1:=1 shl (i-1); temp2:=1 shl (j-1); if g[k-1,i,t] and temp2 =0 then if f[k,i,j]>f[k-1,i,t]+map[t,j] then begin f[k,i,j]:=f[k-1,i,t]+map[t,j]; g[k,i,j]:=g[k-1,i,t]+temp2; end; if g[k-1,t,j] and temp1 =0 then if f[k,i,j]>f[k-1,t,j]+map then begin f[k,i,j]:=f[k-1,t,j]+map; g[k,i,j]:=g[k-1,t,j]+temp1; end; end; min:=maxlongint; for i:=1 to n do for j:=1 to n do if ij then if f[n,i,j]