地推
/************************************************************** Problem: 1197 User: lxy8584099 Language: C++ Result: Accepted Time:0 ms Memory:824 kb ****************************************************************/ /* f i,j表示i维 j次施法得到的不同花 先想一维的情况: 显然k次作用后最多会产生2k种不同的花, 二维呢?新增加一次施法次数便是多一个圆, 圆和刚才已经 画好的圆相交, 我们看新的圆的出现造成了多少种新花的出现,我 们不必看分割出了多少个二维平面, 而是看圆的二维流形: 一条封闭的曲线被分割成了多少部分, 这时问题成了一维的情况,就可以递推了 f i,j =f i,j-1 + f i-1,j-1 */ #include<cstdio> using namespace std; long long f[2][100]; int n,m,k=0; int main() { scanf("%d%d",&m,&n); f[0][0]=1; for(int i=1;i<=m;i++) f[0][i]=(i<<1); for(int i=2;i<=n;i++) { f[k^1][0]=1; for(int j=1;j<=m;j++) f[k^1][j]=f[k^1][j-1]+f[k][j-1]; k^=1; } printf("%lld\n",f[k][m]); return 0; }