zoukankan      html  css  js  c++  java
  • bzoj1055

    不难想到是一个布尔型dp,

    不难想到用f[i,j,k]表示区间[i,j]能否变为字母k

    不难想到对于f[i,j,k],拆[i,j]成两个区间,然后穷举k的每一个变换来判断

    感觉记忆化搜索写的比较顺,就写了记忆化

     1 const a:array[1..4] of char=('W','I','N','G');
     2 
     3 var b:array[0..300] of longint;
     4     f:array[0..300,0..300,0..4] of integer;
     5     w:array[0..4,0..20] of longint;
     6     c:array[1..5] of longint;
     7     l,i,j,k,e,n,m,p:longint;
     8     flag:boolean;
     9     s:string;
    10 
    11 function exc(x:char):longint;
    12   begin
    13     if x='W' then exit(1)
    14     else if x='I' then exit(2)
    15     else if x='N' then exit(3)
    16     else if x='G' then exit(4);
    17   end;
    18 
    19 function search(l,r,k:longint):integer;
    20   var i,j,x1,x2:longint;
    21   begin
    22     if f[l,r,k]<>0 then exit(f[l,r,k]);
    23     if l=r then
    24     begin
    25       f[l,l,b[l]]:=1;
    26       if k=b[l] then exit(1)
    27       else begin
    28         f[l,l,k]:=-1;
    29         exit(-1);
    30       end;
    31     end;
    32     for i:=1 to c[k] do
    33     begin
    34       x1:=(w[k,i]-1) div 4+1;
    35       x2:=(w[k,i]-1) mod 4+1;
    36       for j:=l to r-1 do
    37       begin
    38         if (search(l,j,x1)=1) and (search(j+1,r,x2)=1) then
    39         begin
    40           f[l,r,k]:=1;
    41           exit(1);
    42         end;
    43       end;
    44     end;
    45     f[l,r,k]:=-1;
    46     exit(-1);
    47   end;
    48 
    49 begin
    50   for i:=1 to 4 do
    51     read(c[i]);
    52   readln;
    53   for i:=1 to 4 do
    54     for j:=1 to c[i] do
    55     begin
    56       readln(s);
    57       p:=(exc(s[1])-1)*4+exc(s[2]);
    58       w[i,j]:=p;
    59     end;
    60 
    61   readln(s);
    62   n:=length(s);
    63 
    64   for i:=1 to n do
    65     b[i]:=exc(s[i]);
    66 
    67   flag:=false;
    68   for i:=1 to 4 do
    69     if search(1,n,i)=1 then
    70     begin
    71       write(a[i]);
    72       flag:=true;
    73     end;
    74   if not flag then writeln('The name is wrong!') else writeln;
    75 end.
    View Code
  • 相关阅读:
    给定一个排序数组,你需要在原地删除重复出现的元素
    OSPF-外部路由
    虚链路
    OSPF域间路由计算,防环
    转 C# 只允许运行一个实例
    转 点击关闭时最小化到任务栏
    C#,int转成string,string转成int
    SQL 查找表名 字段名
    C# *= 运算顺序
    SQL 批量删除表
  • 原文地址:https://www.cnblogs.com/phile/p/4473178.html
Copyright © 2011-2022 走看看