BZOJ 1197: [HNOI2006]花仙子的魔法【DP】
Description
相传,在天地初成的远古时代,世界上只有一种叫做“元”的花。接下来,出 现了一位拥有魔法的花仙子,她能给花附加属性,从此,“元”便不断变异,产生了大千世界千奇百怪的各种各样的花。据说,花仙子既可存在于二维空间(平 面),又可存在于三维空间(立体),还可存在于n维空间(想象)。二维空间的点可用向量(x1,x2)表示,三维空间的点可用向量(x1,x2,x3)表 示,一般来说,n维空间的点可用向量(x1,x2,…,xn)表示。而n维空间中两点(x1,x2,…,xn)与(w1,w2,…,wn)之间的距离定义 为。 在n维空间中,花仙子每实施魔法就要选择一个参考点(w1,w2,…,wn)和一个作用半径r,并且参考点的位置和作用半径的大小可以任意选择。这时,n 维空间中所有与参考点(w1,w2,…,wn)之间的距离小于作用半径r的花都会受到这次魔法的影响。每次魔法都会给受到影响的花带来不同的属性,且的效 果可以叠加。一般来说,若花仙子总共实施了m次魔法,则n维空间中处于某点的花所具有的属性可用长度为m的二进制串a1a2…am来描述,其中对 1≤i≤m,若该花受到第i次魔法的影响,则ai的值为1,否则为0。显然,不同的属性对应不同的花。 现在的问题是:花仙子在n维空间中实施了m次魔法后,最多能得到多少种不同的花?
Input
包含两个整数,并用一个空格隔开,第一个整数表示实施魔法的次数m,第二个整数表示空间的维数n。其中,1≤m≤100,1≤n≤15。
Output
仅包含一个整数,表示花仙子在n维空间中实施了m次魔法后,最多能得到多少种不同的花。
Sample Input
3 1
Sample Output
6
思路:很 好写但不好想的dp 4维以上的空间就脑部不出来了TUT。先想一维的情况:显然k次作用后最多会产生2k种不同的花,二维呢?新增加一次施法次数便是多一个圆,圆和刚才已经 画好的圆相交,我们看新的圆的出现造成了多少种新花的出现,我们不必看分割出了多少个二维平面,而是看圆的二维流形:一条封闭的曲线被分割成了多少部分, 这时问题成了一维的情况,就可以递推了
然后再想到两个三维的球相交在二维上的投影是圆,两个四维的超球体相交在三维的投影是球,因此设 dp[i][j]表示n维空间施法m次能得到最多的不同的花,在二维上分析即可得到dp[i][j]=dp[i-1][j-1]+dp[i][j-1], 代码里用到了滚动数组还是没排上第一页,排第一的那个c++的是怎么写的TAT
#include<cstdio>
long long dp[2][100];
int main()
{
int n,m;
long long *a=dp[0],*b=dp[1];
scanf("%d%d",&m,&n);dp[0][0]=1;
for(int i=1;i<=m;i++)a[i]=i*2;
if(n==1){printf("%lld",a[m]);return 0;}
for(int i=2;i<=n;i++)
{
b[0]=1;
for(int j=1;j<=m;j++) b[j]=b[j-1]+a[j-1];
long long *t=a;a=b;b=t;
}
printf("%lld\n",a[m]);
return 0;
}
BZOJ 1197: [HNOI2006]花仙子的魔法【DP】的更多相关文章
- BZOJ 1197 [HNOI2006]花仙子的魔法 (数学题)
题面:洛谷传送门 BZOJ传送门 非常有意思的一道数学题,浓浓的$CF$风,然而我并没有想出来.. 我们想把一个$n$维空间用$n$维球分成尽可能多的块 而新增加一个$n$维球时,肯定要尽可能多地切割 ...
- 1197: [HNOI2006]花仙子的魔法
1197: [HNOI2006]花仙子的魔法 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 762 Solved: 443[Submit][Stat ...
- 1197: [HNOI2006]花仙子的魔法 - BZOJ
Description Input 包含两个整数,并用一个空格隔开,第一个整数表示实施魔法的次数m,第二个整数表示空间的维数n.其中,1≤m≤100,1≤n≤15. Output 仅包含一个整数,表示 ...
- bzoj千题计划183:bzoj1197: [HNOI2006]花仙子的魔法
http://www.lydsy.com/JudgeOnline/problem.php?id=1197 题意转化:在n维空间中放m个n维球,问最多将空间分成几部分 f[i][j] 表示在i维空间中放 ...
- BZOJ1197 [HNOI2006]花仙子的魔法
其实是一道奇怪的DP题,蒟蒻又不会做... 看了Vfk的题解才算弄明白是怎么一回事: 令f[i, j]表示i维有j个球时最大切割部分,则 f[i, j] = f[i, j - 1] + f[i - 1 ...
- HNOI2006 花仙子的魔法
题目描述 题解: 考试的时候手画打表,然后半个小时磨了个式子:$$f[i][j]=f[i-1][j-1]+f[i][j-1]$$ 交上去$A$的时候都蒙了. 考后才知道原因. 考虑$n$维空间内原来有 ...
- [BZOJ 4033] [HAOI2015] T1 【树形DP】
题目链接:BZOJ - 4033 题目分析 使用树形DP,用 f[i][j] 表示在以 i 为根的子树,有 j 个黑点的最大权值. 这个权值指的是,这个子树内部的点对间距离的贡献,以及 i 和 Fat ...
- Bzoj 1055: [HAOI2008]玩具取名 (区间DP)
Bzoj 1055: [HAOI2008]玩具取名 (区间DP) 题目链接:https://www.lydsy.com/JudgeOnline/problem.php?id=1055 区间动态规划和可 ...
- [BZOJ 3992] [SDOI 2015] 序列统计(DP+原根+NTT)
[BZOJ 3992] [SDOI 2015] 序列统计(DP+原根+NTT) 题面 小C有一个集合S,里面的元素都是小于质数M的非负整数.他用程序编写了一个数列生成器,可以生成一个长度为N的数列,数 ...
随机推荐
- MySQL存储过程简介和引擎说明
- 解决flexpaper读取本地文件问题,JAVA+TOMCAT
flexpaper是不可以用绝对路径的调用本地或项目外的swf文件的,这个我们就有两种方法,一种是把swf和项目放在同一个目录下面,通过相对路径来获取 另一种是在运行项目的tomcat的server. ...
- SQL中的IF ELSE(CASE语句的使用)
大家对IF ELSE语句可能都很熟悉,它是用来对过程进行控制的.在SQL的世界中CASE语句语句有类似的效果.下面简单的介绍CASE语句的用法.考虑下面的情况,假设有个user表,定义如下: CREA ...
- Cordova插件中JavaScript代码与Java的交互细节介绍
在Cordova官网中有这么一张架构图:大家看右下角蓝色的矩形框"Custom Plugin"--自定义插件.意思就是如果您用Cordova打包Mobile应用时,发现您的移动应用 ...
- 融云参加RTC实时互联网大会 现场集成IM SDK
9月21至22日,由全球实时云服务商声网Agora.io主办的RTC2017实时互联网大会在北京万豪酒店成功举办.作为亚洲最权威的RTC实时通信行业技术盛会,会议吸引了来自全球上千名开发者参加,Goo ...
- Could not load OpenSSL解决
问题 Could not load OpenSSL. You must recompile Ruby with OpenSSL support or change the sources in you ...
- MATLAB——解数独
数独 数独是一种逻辑游戏,玩家需要根据9x9盘面的已知数字,推理出剩余所有空格的数字,并满足每一行.每一列和每个粗线宫(3x3)内均含1~9,不重复. MATLAB中有关函数 M = dlmread( ...
- OpenRead方法打开文件并读取
实现效果: 知识运用: File类的OpenRead方法 //实现打开现有文件以进行读取 public static FileStream OpenRead(string path) FileStre ...
- 利用python进行数据分析1_numpy的基本操作,建模基础
import numpy as np # 生成指定维度的随机多维数据 data=np.random.rand(2,3) print(data) print(type(data)) 结果: [[0.11 ...
- intellij IDEA版本控制设置
我们开发肯定是有版本控制的,大家以前Eclipse的时候在本地文件和版本库不一致的时候,那么文件以及所在的文件夹都会出现一个〉表示,大家能很轻松的看到本地文件修改了哪一些,但是IntelliJ中默认是 ...