zoukankan      html  css  js  c++  java
  • 小兔的棋盘


    title: 小兔的棋盘
    tags: [acm,杭电]

    题目链接

    小兔的棋盘

    Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 10244    Accepted Submission(s): 5248

    Problem Description

    小兔的叔叔从外面旅游回来给她带来了一个礼物,小兔高兴地跑回自己的房间,拆开一看是一个棋盘,小兔有所失望。不过没过几天发现了棋盘的好玩之处。从起点(0,0)走到终点(n,n)的最短路径数是C(2n,n),现在小兔又想如果不穿越对角线(但可接触对角线上的格点),这样的路径数有多少?小兔想了很长时间都没想出来,现在想请你帮助小兔解决这个问题,对于你来说应该不难吧!

    Input

    每次输入一个数n(1<=n<=35),当n等于-1时结束输入。

    Output

    对于每个输入数据输出路径数,具体格式看Sample。

    Sample Input

    1
    3
    12
    -1
    

    Sample Output

    1 1 2
    2 3 10
    3 12 416024
    

    题意

    从(0,0)点出发到(n,n)点,一共有多少条路线,规定不穿越对角线,就是只能向右或者向下。

    分析

    由于是一个正方形的宫格,连接对角线把棋盘分成两部分,其中一部分的走法与另外一部分的走法完全一样,所以计算时只需计算其中的一部分就行,最后再让结果乘以2。

    最边上的只有一条路径到达,如图中的B点只能从上到B点或者从左方到B点,再如对角线上的C点,只能从A点到达,所以

    for(int i=1; i<40; i++)
            for(int j=1; j<=i; j++)
            {
                if(j==i)
                    a[i][j]= a[i][j-1];
                else
                    a[i][j]=a[i-1][j]+a[i][j-1];
            }
    

    代码

    #include <iostream>
    #include<algorithm>
    #include<stdio.h>
    using namespace std;
    int main()
    {
        int n;
        long long int a[40][40];
        for(int i=0; i<40; i++)
            a[0][i]=1;
        for(int i=0; i<40; i++)
            a[i][0]=1;
        for(int i=1; i<40; i++)
            for(int j=1; j<=i; j++)
            {
                if(j==i)
                    a[i][j]= a[i][j-1];
                else
                    a[i][j]=a[i-1][j]+a[i][j-1];
            }
        int counter=1;
        while(~scanf("%d",&n),n)
        {
            if(n==-1)break;
            printf("%d %d %lld
    ",counter++,n,a[n][n]*2);
        }
        return 0;
    }
    
    
    
  • 相关阅读:
    win7下的vxworks总结
    ubuntu 无法获得锁 /var/lib/dpkg/lock
    项目中用到了的一些批处理文件
    win7下安装 WINDRIVER.TORNADO.V2.2.FOR.ARM
    使用opencv统计视频库的总时长
    January 05th, 2018 Week 01st Friday
    January 04th, 2018 Week 01st Thursday
    January 03rd, 2018 Week 01st Wednesday
    January 02nd, 2018 Week 01st Tuesday
    January 01st, 2018 Week 01st Monday
  • 原文地址:https://www.cnblogs.com/dccmmtop/p/6708411.html
Copyright © 2011-2022 走看看