题解

294 条题解

  • 0
    @ 2008-11-02 22:52:48

    编译通过...

    ├ 测试数据 01:答案正确... 0ms

    ├ 测试数据 02:答案正确... 0ms

    ├ 测试数据 03:答案正确... 0ms

    ├ 测试数据 04:答案正确... 0ms

    ├ 测试数据 05:答案正确... 0ms

    ├ 测试数据 06:答案正确... 0ms

    ├ 测试数据 07:答案正确... 0ms

    ├ 测试数据 08:答案正确... 0ms

    ├ 测试数据 09:答案正确... 0ms

    ├ 测试数据 10:答案正确... 0ms

    ---|---|---|---|---|---|---|---|-

    Accepted 有效得分:100 有效耗时:0ms

    最基本的DP。。。没用什么int64啊~

    #include

    #include

    using namespace std;

    int bx,by,mx,my;

    int map[20][20]={0};

    bool check(int kx,int ky){

    if ((kx==mx&&ky==my)||(kx==mx-1&&ky==my-2)||(kx==mx-1&&ky==my+2)||(kx==mx-2&&ky==my+1)||(kx==mx-2&&ky==my-1)||(kx==mx+1&&ky==my+2)||(kx==mx+1&&ky==my-2)||(kx==mx+2&&ky==my+1)||(kx==mx+2&&ky==my-1)) return false;

    return true;

    }

    int main(){

    cin>>bx>>by>>mx>>my;

    map[bx+1][by]=1;

    for (int i=bx;i>=0;i--){

    for (int j=by;j>=0;j--){

    if (check(i,j)) map[i][j]+=map[j]+map[i][j+1];

    }}

    cout

  • 0
    @ 2008-11-02 19:35:55

    编译通过...

    ├ 测试数据 01:答案正确... 0ms

    ├ 测试数据 02:答案正确... 0ms

    ├ 测试数据 03:答案正确... 0ms

    ├ 测试数据 04:答案正确... 0ms

    ├ 测试数据 05:答案正确... 0ms

    ├ 测试数据 06:答案正确... 0ms

    ├ 测试数据 07:答案正确... 0ms

    ├ 测试数据 08:答案正确... 0ms

    ├ 测试数据 09:答案正确... 0ms

    ├ 测试数据 10:答案正确... 0ms

    ---|---|---|---|---|---|---|---|-

    Accepted 有效得分:100 有效耗时:0ms

    假的搜索题,用杨辉三角形解。

  • 0
    @ 2008-11-01 10:56:50

    居然要用int64..T,T

  • 0
    @ 2008-11-01 10:51:04

    ├ 测试数据 01:答案正确... 0ms

    ├ 测试数据 02:答案正确... 0ms

    ├ 测试数据 03:答案错误...程序输出比正确答案长

    ├ 测试数据 04:答案正确... 0ms

    ├ 测试数据 05:答案正确... 0ms

    ├ 测试数据 06:答案正确... 0ms

    ├ 测试数据 07:答案正确... 0ms

    ├ 测试数据 08:答案正确... 0ms

    ├ 测试数据 09:答案正确... 0ms

    ├ 测试数据 10:答案正确... 0ms

    ---|---|---|---|---|---|---|---|-

    Unaccepted 有效得分:90 有效耗时:0ms

    为什么├ 测试数据 03:答案错误...程序输出比正确答案长

    .....const

    q:array[1..8,1..2] of integer=((1,2),(1,-2),(-1,2),(-1,-2),(2,1),(2,-1),(-2,1),(-2,-1));

    var

    bx,by,hx,hy,i,j:longint;

    a:array[0..15,0..15] of int64;

    begin

    read(bx,by,hx,hy);

    for i:=1 to bx do

    for j:=1 to by do

    begin

    a:=1;

    a[0,j]:=1;

    a:=-1;

    end;

    a[hx,hy]:=0;

    for i:=1 to 8 do

    if (hx+q>-1) and (hx+q-1) and (hy+q

  • 0
    @ 2008-10-30 20:14:12

    编译通过...

    ├ 测试数据 01:答案正确... 0ms

    ├ 测试数据 02:答案正确... 0ms

    ├ 测试数据 03:答案正确... 0ms

    ├ 测试数据 04:答案正确... 0ms

    ├ 测试数据 05:答案正确... 0ms

    ├ 测试数据 06:答案正确... 0ms

    ├ 测试数据 07:答案正确... 0ms

    ├ 测试数据 08:答案正确... 0ms

    ├ 测试数据 09:答案正确... 384ms

    ├ 测试数据 10:答案正确... 494ms

    ---|---|---|---|---|---|---|---|-

    Accepted 有效得分:100 有效耗时:878ms

    貌似速度有点慢。。

    用简单的回朔。

    庆祝AC 24 !

  • 0
    @ 2008-10-30 18:10:41

    ├ 测试数据 01:答案正确... 0ms

    ├ 测试数据 02:答案正确... 0ms

    ├ 测试数据 03:答案正确... 0ms

    ├ 测试数据 04:答案正确... 0ms

    ├ 测试数据 05:答案正确... 0ms

    ├ 测试数据 06:答案正确... 0ms

    ├ 测试数据 07:答案正确... 0ms

    ├ 测试数据 08:答案正确... 0ms

    ├ 测试数据 09:答案正确... 0ms

    ├ 测试数据 10:答案正确... 0ms

    ---|---|---|---|---|---|---|---|-

    Accepted 有效得分:100 有效耗时:0ms

  • 0
    @ 2008-10-27 22:39:36

    编译通过...

    ├ 测试数据 01:答案正确... 0ms

    ├ 测试数据 02:答案正确... 0ms

    ├ 测试数据 03:答案正确... 0ms

    ├ 测试数据 04:答案正确... 0ms

    ├ 测试数据 05:答案正确... 0ms

    ├ 测试数据 06:答案正确... 0ms

    ├ 测试数据 07:答案正确... 0ms

    ├ 测试数据 08:答案正确... 0ms

    ├ 测试数据 09:答案正确... 0ms

    ├ 测试数据 10:答案正确... 0ms

    ---|---|---|---|---|---|---|---|-

    Accepted 有效得分:100 有效耗时:0ms

  • 0
    @ 2008-10-27 21:17:22

    DFS吧……

    先把马能跳到的地方全部标记一遍把

    我觉得这样比较简单

  • 0
    @ 2008-10-27 17:02:18

    程序写那么长干嘛 有点疑惑

    const dh:Array[1..8,1..2] of integer=

    ((1,2),(1,-2),(-1,2),(-1,-2),(2,1),(2,-1),(-2,1),(-2,-1));

    var

    f:Array[0..15,0..15] of int64;

    una:Array[-2..17,-2..17] of boolean;

    n,m,i,j,hx,hy:longint;

    begin

    read(n,m,hx,hy);

    una[hx,hy]:=true;

    for i:=1 to 8 do

    una[hx+dh,hy+dh]:=true;

    f[0,0]:=1;

    for i:=0 to n do

    for j:=0 to m do

    if not una then

    begin

    inc(f,f);

    inc(f,f);

    end;

    writeln(f[n,m]);

    end.

  • 0
    @ 2008-10-26 22:53:20

    From zhouyc

    马拦过河卒 全国青少年信息学奥林匹克分区联赛 (NOIp) 竞赛原题

    编译通过...

    ├ 测试数据 01:答案正确... 0ms

    ├ 测试数据 02:答案正确... 0ms

    ├ 测试数据 03:答案正确... 0ms

    ├ 测试数据 04:答案正确... 0ms

    ├ 测试数据 05:答案正确... 0ms

    ├ 测试数据 06:答案正确... 0ms

    ├ 测试数据 07:答案正确... 0ms

    ├ 测试数据 08:答案正确... 0ms

    ├ 测试数据 09:答案正确... 244ms

    ├ 测试数据 10:答案正确... 244ms

    ---|---|---|---|---|---|---|---|-

    Accepted 有效得分:100 有效耗时:488ms

    55555555555555555

    复制的时候少了个括号,WA了一次,我的AC率

    #include

    using namespace std;

    int a[10000][10000],m=0,x1,y1;

    int f(int x,int y)

    {

    if ((x==x1)&&(y==y1)) {m++;return 0;}

    if (((x+1)x1>>y1>>x>>y;

    for (i=0;i

  • 0
    @ 2008-10-16 16:50:28

    program soldier(input,output);

    var

    g:array [-30..30,-30..30] of int64;

    v:array [-30..30,-30..30] of boolean;

    i,j,n,m,x,y,k:longint;

    begin

    fillchar(g,sizeof(g),0);

    fillchar(v,sizeof(v),true);

    read(n,m,x,y);

    v[x,y]:=false;

    v[x-2,y-1]:=false; v[x-1,y-2]:=false;

    v[x+2,y+1]:=false; v[x+1,y+2]:=false;

    v[x-2,y+1]:=false; v[x+2,y-1]:=false;

    v[x-1,y+2]:=false; v[x+1,y-2]:=false;

    for i:=0 to n do if v then g:=1 else break;

    for i:=0 to m do if v[0,i] then g[0,i]:=1 else break;

    for k:=1 to m do

       for i:=1 to n do

        if v then g:=g+g;

    write(g[n,m]);

    end.

  • 0
    @ 2008-10-16 08:14:47

    用递推的注意啦。。。

    一定要看楼下

  • 0
    @ 2008-10-14 15:36:06

    被第三组数据阴了

    大家注意一下

    5 6 2 2

    。。。。。。

  • 0
    @ 2008-10-12 20:46:39

    同志们啊,我会回朔了,800年都没会过~~!!!!

    递归过了,汗。。。。。。。。。。。。。

    #include

    using namespace std;

    int x,y,x1,y1,a[10000][10000],m=0;

    int huishuo (int x3,int y3)

    {

    if (a[x3][y3]==2)

    {

    m++;

    return 0;

    }

    if ((a[x3+1][y3]!=1)&&(x3+1x>>y>>x1>>y1;

    for (i=0;i

  • 0
    @ 2008-10-06 20:09:40

    program soldier(input,output);

    var

    g:array [-30..30,-30..30] of int64;

    v:array [-30..30,-30..30] of boolean;

    i,j,n,m,x,y,k:longint;

    begin

    fillchar(g,sizeof(g),0);

    fillchar(v,sizeof(v),true);

    read(n,m,x,y);

    v[x,y]:=false;

    v[x-2,y-1]:=false; v[x-1,y-2]:=false;

    v[x+2,y+1]:=false; v[x+1,y+2]:=false;

    v[x-2,y+1]:=false; v[x+2,y-1]:=false;

    v[x-1,y+2]:=false; v[x+1,y-2]:=false;

    for i:=0 to n do if v then g:=1 else break;

    for i:=0 to m do if v[0,i] then g[0,i]:=1 else break;

    for k:=1 to m do

    for i:=1 to n do

    if v then g:=g+g;

    write(g[n,m]);

    end.

  • 0
    @ 2008-10-06 19:07:35

    编译通过...

    ├ 测试数据 01:答案正确... 0ms

    ├ 测试数据 02:答案正确... 0ms

    ├ 测试数据 03:答案正确... 0ms

    ├ 测试数据 04:答案正确... 0ms

    ├ 测试数据 05:答案正确... 0ms

    ├ 测试数据 06:答案正确... 0ms

    ├ 测试数据 07:答案正确... 0ms

    ├ 测试数据 08:答案正确... 0ms

    ├ 测试数据 09:答案正确... 306ms

    ├ 测试数据 10:答案正确... 353ms

    ---|---|---|---|---|---|---|---|-

    Accepted 有效得分:100 有效耗时:659ms

  • 0
    @ 2008-10-05 20:38:33

    编译通过...

    ├ 测试数据 01:答案正确... 0ms

    ├ 测试数据 02:答案正确... 0ms

    ├ 测试数据 03:答案正确... 0ms

    ├ 测试数据 04:答案正确... 0ms

    ├ 测试数据 05:答案正确... 0ms

    ├ 测试数据 06:答案正确... 0ms

    ├ 测试数据 07:答案正确... 0ms

    ├ 测试数据 08:答案正确... 0ms

    ├ 测试数据 09:答案正确... 0ms

    ├ 测试数据 10:答案正确... 0ms

    ---|---|---|---|---|---|---|---|-

    Accepted 有效得分:100 有效耗时:0ms

    f[0][0]=1;

    for (i=1;i

  • 0
    @ 2008-10-02 15:56:06

    const dx:array[1..8] of longint=(1,1,2,2,-1,-1,-2,-2);

    dy:array[1..8] of longint=(2,-2,1,-1,2,-2,1,-1);

    var i,n,m,x,y,total:longint;

    ans:array[0..15,0..15] of longint;

    procedure search(x,y:longint);

    begin

    if (x=n) and (y=m) then inc(total)

    else

    if (x

  • 0
    @ 2008-10-01 15:14:47

    一开始BFS+回溯=超时

    于是采用了记忆化搜索,全部0ms-___|\__|\__|\__|_-

    1.马是走日字,要把马能一步走到的点和马所在的点先标记了

    2.试下这个数据15 15 7 8 答案是19063305 -___|\
    __|-

    #include

    using namespace std;

    int ex,ey,n,m;

    const int dir[4][2]={1,0,-1,0,0,1,0,-1},dir2[8][2]={1,2,1,-2,-1,2,-1,-2,2,-1,2,1,-2,-1,-2,1};

    struct _pos{int x,y;}top,tmp,q[1000000];

    int mark[16][16],head,rear,dp[16][16];

    int dfs(int x,int y)

    {

    int i,tx,ty,ret=0;

    if(x==0&&y==0)return 1;

    if(dp[x][y])return dp[x][y];

    for(i=0;itx+ty)continue;

    if(mark[tx][ty]==mark[x][y]-1)

    ret+=dfs(tx,ty);

    }

    return dp[x][y]=ret;

    }

    int main()

    {

    bool flag;

    int i,j,tex,tey;

    while(cin>>n>>m>>ex>>ey)

    {

    for(i=0;i

  • 0
    @ 2008-09-27 22:00:33

    杨辉三角

    刚开始看到有负数, 就把计数的total改成longint了, 结果还是60分,把所有变量都改了,就行了.

    很难理解列,其他的变量都是i j x y... 我也只开了-1..16的数组, 说明测试数据没有问题啊,,,, 为什么会这样列..?

信息

ID
1121
难度
4
分类
动态规划 点击显示
标签
递交数
9572
已通过
3779
通过率
39%
被复制
23
上传者