您的位置:首页 > 其它

HDU-2050 折现分割平面 递推

2017-10-07 22:28 267 查看
题目链接:http://acm.split.hdu.edu.cn/showproblem.php?pid=2050

题意:用m个V字最多可以分割多少个平面。

思路:直接推V字的公式有点难,我们可以尝试从常见的直线型来入手。直线型的思路当然是每次新增的第n条直线都切割了平面上的所有n-1直线,显而易见这个时候会新增n-1个点。然后就可以找一下规律了。手推一下序列为2,4,7,11……发现每次都加n,所以可以想到点和面的规律应该为n-1+1,画一下图会比较好理解。(没有严格证明,如有错误请指出)。回到V字形的,每次最多新增4*(n-1)个点,所以每次会多4 *(n-1)+1个面。递推或者打表都行。

#include <stdio.h>
#include <algorithm>
#include <math.h>
#include <iostream>
using namespace std;
const int maxn = 1e5+10;
typedef long long ll;
ll dp[maxn];

int main()
{
int n,m;
dp[1]=2,dp[2]=7;
for(int i=3;i<maxn;i++){
dp[i]=4*i-3+dp[i-1];
}
scanf("%d",&n);
while(n--){
scanf("%d",&m);
printf("%lld\n",dp[m]);
}
return 0;
}


另,貌似今年的湘潭热身好像出了一道W的?有兴趣可以推一下,当然具体数学dalao大概可以一眼出答案?
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息