zoukankan      html  css  js  c++  java
  • bzoj 1197 DP

      我们可以将这个问题转化为在n维空间中一共放m个n维球,求这m个球最多将这个空间分为不同的几个部分。

      那么我们设w[i][j]代表i为空间放j个球分为的部分,那么w[i][j]=w[i][j-1]+w[i-1][j-1],我们考虑当前第j个球所产生的新的部分,在n维空间中,放一个n维球,这个球和其他n维球的相交的部分会降维变成n-1维,类似于3维空间球体相交部分为面,那么我们新加这个球最多可以和剩下的j-1个球都相交,且相交的部分为i-1维,那么这个问题就转化成了在i-1维中,j-1个球最多将这个空间分成多少部分,也就是w[i-1][j-1]。

    /**************************************************************
        Problem: 1197
        User: BLADEVIL
        Language: C++
        Result: Accepted
        Time:0 ms
        Memory:808 kb
    ****************************************************************/
     
    //By BLADEVIL
    #include <cstdio>
    #define LL long long
    #define maxm 101
     
    using namespace std;
     
    int n,m,i,j;
    LL w[2][maxm];
     
    int main() {
        scanf("%d%d",&m,&n);
        w[0][1]=w[1][1]=2;
        for (i=1;i<=m;i++) w[1][i]=2*i;
        for (i=2;i<=n;i++) 
            for (j=2;j<=m;j++)
                w[i%2][j]=w[i%2][j-1]+w[(i+1)%2][j-1];
        printf("%lld
    ",w[n%2][m]);
        return 0;
    }
  • 相关阅读:
    ABC221
    ABC216
    ABC218
    ABC223
    ABC220
    聊聊并发(七)——锁 Craftsman
    (一)推荐阅读 Craftsman
    聊聊并发(五)——线程池 Craftsman
    (二)工作三年的一些感悟 Craftsman
    Java基础(八)——IO流1_字节流、字符流 Craftsman
  • 原文地址:https://www.cnblogs.com/BLADEVIL/p/3591324.html
Copyright © 2011-2022 走看看