码迷,mamicode.com
首页 > 其他好文 > 详细

hdu-5621 KK's Point(dp+数学)

时间:2016-04-24 23:04:12      阅读:174      评论:0      收藏:0      [点我收藏+]

标签:

题目链接:

KK‘s Point

Time Limit: 2000/1000 MS (Java/Others)   

 Memory Limit: 65536/65536 K (Java/Others)


Problem Description
 
Our lovely KK has a difficult mathematical problem:He points N(2≤N≤10^5) points on a circle,there are all different.Now he‘s going to connect the N points with each other(There are no three lines in the circle to hand over a point.).KK wants to know how many points are there in the picture(Including the dots of boundary).
 

 

Input
 
The first line of the input file contains an integer T(1≤T≤10), which indicates the number of test cases.

For each test case, there are one lines,includes a integer N(2≤N≤10^5),indicating the number of dots of the polygon.
 

 

Output
 
For each test case, there are one lines,includes a integer,indicating the number of the dots.
 

 

Sample Input
2
3
4
 

 

Sample Output
3
5
 
题意:
 
在圆上有n个点,每两个点都相连,问连线有多少个交点,任意三根线不交于同一点;
 
思路:
 
dp来解决,每加入一个点我们可以发现,增加的交点个数为1*n+2*(n-1)+3*(n-2)+...+n*1+1(最后这个1是这个点本身);
这是怎么来的可以画个图来自己画一下看看;每次把原先的点分成两拨;
 
现在的问题变成怎么求上述的式子了;
 
f(n)=1*n+2*(n-1)+3*(n-2)+...+n*1;
f(n+1)=1*(n+1)+2*n+3*(n-1)+...+(n+1)*1;
f(n+1)-f(n)=(n+1)+n+(n-1)+(n-2)+...+1=(n+1)(n+2)/2;
那么状态转移方程就有了dp[i]=dp[i-1]+1+f(i-3);
 
 
AC代码:
 
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
#include <queue>
#include <stack>
#include <map>
using namespace std;
typedef long long ll;
const ll mod=1e9+7;
const ll inf=1e15;
const int N=1e5+6;
int n;
ll dp[N],f[N];
void fun()
{
    dp[1]=1;//注意dp[1]   dp[2]的初始化,我在这里就wa了一发;
    dp[2]=2;
    dp[3]=3;
    f[1]=1;
    for(int i=2;i<N;i++)
    {
        ll x=(i);
        f[i]=f[i-1]+x*(x+1)/2;
    }
    for(int i=4;i<N;i++)
    {
        dp[i]=dp[i-1]+1+f[i-3];
    }
}
int main()
{
    int t;
    scanf("%d",&t);
    fun();
    while(t--)
    {
        scanf("%d",&n);
        cout<<dp[n]<<"\n";
        //printf("%lld\n",dp[n]);
    }
    return 0;
}

 

hdu-5621 KK's Point(dp+数学)

标签:

原文地址:http://www.cnblogs.com/zhangchengc919/p/5428730.html

踩
(0)
赞
(0)
   
举报
评论 一句话评论(0)
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!