首页 > 其他 > 详细

bzoj 1197 DP

时间:2014-03-11 05:53:24      阅读:513      评论:0      收藏:0      [点我收藏+]

  我们可以将这个问题转化为在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]。

bubuko.com,布布扣
/**************************************************************
    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\n",w[n%2][m]);
    return 0;
}
bubuko.com,布布扣

bzoj 1197 DP,布布扣,bubuko.com

bzoj 1197 DP

原文:http://www.cnblogs.com/BLADEVIL/p/3591324.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!