• UVA 1638 Pole Arrangement


    https://vjudge.net/problem/UVA-1638

    题意:

    n根长度分别为1,2,3,4……n的木棍

    将这些木棍竖着排成一列

    问从左边看能看到L根,从右边看能看到R根的方案数

    将木棍从长到短放

    dp[k][i][j] 表示再放第k根,从左边能看到i根,从右边能看到j根的方案数

    放到最左边,从左边可以看到的木棍数+1

    放到最右边,从右边可以看到的木棍数+1

    放到中间,看到的木棍数不变

    所以动态转移方程:dp[k][i][j]=dp[k-1][i-1][j]+dp[k-1][i][j-1]+dp[k-1][i][j]*(k-2);

    #include<cstdio>
    using namespace std;
    typedef long long LL;
    LL dp[21][21][21];
    int main()
    {
        int T,n,l,r;
        dp[1][1][1]=1;
        for(int k=2;k<=20;k++)
            for(int i=1;i<=k;i++)
                for(int j=1;j+i-1<=k;j++)
                      dp[k][i][j]=dp[k-1][i-1][j]+dp[k-1][i][j-1]+dp[k-1][i][j]*(k-2);
        scanf("%d",&T);
        while(T--)
        {
            scanf("%d%d%d",&n,&l,&r);
            printf("%lld
    ",dp[n][l][r]);
        }
    }
  • 相关阅读:
    @codeforces
    @atcoder
    @loj
    @atcoder
    @atcoder
    @loj
    @atcoder
    @atcoder
    @atcoder
    @uoj
  • 原文地址:https://www.cnblogs.com/TheRoadToTheGold/p/7395989.html
Copyright © 2020-2023  润新知