• 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;
    }
  • 相关阅读:
    Java编程思想学习(三)----第三章:操作符
    mybatis入门
    responsebody和requestbody的使用
    一个Interface 继承多个Interface 的总结
    requirejs中Shims使用说明
    java 中解析json步骤
    @transient加在属性前的作用
    实现serializable接口的作用
    springmvc源码解析-初始化
    @RequestMapping注解详解
  • 原文地址:https://www.cnblogs.com/BLADEVIL/p/3591324.html
Copyright © 2020-2023  润新知