http://acm.hdu.edu.cn/showproblem.php?pid=2050
题解:
1.
直接找规律,观察可得,dp[1]=2,dp[2]=7,dp[3]=16,dp[4]=29
观察知:dp[i]=dp[i-1]+4*(i-1)+1
2.
如果以直线分割平面,第n条直线将最多产生n-1个交点,会多n-1+1个平面
折线也类似,第n条折线最多产生2*2*(n-1)个交点,会多4*(n-1)+1个平面。得dp方程:dp[i]=dp[i-1]+4*(i-1)+1
#include<iostream>
#include<string>
#include<cstring>
using namespace std;
long long int dp[10005];
int main()
{
int c,n;
cin>>c;
dp[1]=2;
for(int i=2;i<10005;i++)
{
dp[i]=dp[i-1]+4*(i-1)+1;
}
while(c--)
{
cin>>n;
cout<<dp[n]<<endl;
}
return 0;
}
本文提供了一道编号为2050的HDU在线评测题目解析,通过观察规律得出动态规划方程,并给出了C++实现代码。问题涉及直线和平面对平面的分割,最终求出特定数值下的平面数量。
621

被折叠的 条评论
为什么被折叠?



