首页 新闻 赞助 找找看

乌龟棋问题的思路

0
悬赏园豆:50 [已解决问题] 解决于 2015-04-23 14:31

乌龟棋的懂不起,理解背包问题就够痛苦的了,四维数组真的懂不起啊

毛毛虫的寂寞的主页 毛毛虫的寂寞 | 初学一级 | 园豆:157
提问于:2015-04-22 21:28
< >
分享
最佳答案
0

uses math;
var
 

    maxx,n,i,m,kk,i1,i2,i3,i4:longint;
     k:array[0..4] of integer;
     f:array[-4..5,-1..40,-1..40,-1..40] of longint;
     a:array[0..351] of longint;
     b:array[0..121] of longint;
begin
     readln(n,m);
     for i:=1 to n do read(a[i]);readln;
     for i:=1 to m do begin
         read(b[i]);
         inc(k[b[i]]);
     end;
     f[1,0,0,0]:=a[1];
     for i:=2 to 4 do begin
         for i1:=0 to k[1] do if i1<=3 then
         for i2:=0 to k[2] do begin
             if i1+i2*2+1>i then break;
             for i3:=0 to k[3] do begin
             if i1+i2*2+i3*3+1>i then break;
             if (i-i1-i2*2-i3*3-1) mod 4<>0 then continue;
             i4:=(i-i1-i2*2-i3*3-1) div 4;
             if i4>k[4] then continue;
             f[i,i1,i2,i3]:=a[i]+max(
             max(f[i-3,i1,i2,i3-1],f[i-4,i1,i2,i3]),max(f[i-1,i1-1,i2,i3],f[i-2,i1,i2-1,i3]));
             if i=n then if f[i,i1,i2,i3]>maxx then maxx:=f[i,i1,i2,i3];
             end;
         end;
     end;
     for i:=5 to n do begin
         for i1:=0 to k[1] do begin
             if i1+1>i then break;
             for i2:=0 to k[2] do begin
                 if i1+i2*2+1>i then break;
                 for i3:=0 to k[3] do begin
                 if i1+i2*2+i3*3+1>i then break;
                 if (i-i1-i2*2-i3*3-1) mod 4<>0 then continue;
                 i4:=(i-i1-i2*2-i3*3-1) div 4;
                 if i4>k[4] then continue;
                 f[5,i1,i2,i3]:=a[i]+max(
                 max(f[2,i1,i2,i3-1],f[1,i1,i2,i3]),max(f[4,i1-1,i2,i3],f[3,i1,i2-1,i3]));
                 if i=n then if f[5,i1,i2,i3]>maxx then maxx:=f[5,i1,i2,i3];
                 end;
             end;
         end;
         for kk:=1 to 4 do f[kk]:=f[kk+1];
     end;
     writeln(maxx);
end.
收获园豆:50
女孩,加油 | 小虾三级 |园豆:1098 | 2015-04-23 14:29

已经懂了,谢谢

毛毛虫的寂寞 | 园豆:157 (初学一级) | 2015-04-23 14:31

@毛毛虫的寂寞: 嗯嗯

女孩,加油 | 园豆:1098 (小虾三级) | 2015-04-23 14:33
其他回答(1)
0
爱编程的大叔 | 园豆:30839 (高人七级) | 2015-04-22 22:04

有时候三行的代码也会让人觉得智商捉急

支持(0) 反对(0) 毛毛虫的寂寞 | 园豆:157 (初学一级) | 2015-04-22 22:05

@毛毛虫的寂寞: 那就没办法了,你可以考虑从事不需要这么高智商的工作。

支持(0) 反对(0) 爱编程的大叔 | 园豆:30839 (高人七级) | 2015-04-22 22:08

@爱编程的大叔:好是伤心

支持(0) 反对(0) 毛毛虫的寂寞 | 园豆:157 (初学一级) | 2015-04-22 22:09
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册