解题思路:这道题看到数据量,想到应该搜索+剪枝应该可以过。。可是别人的A了,我的却超时了。。。
我用了一个mark[a][b],表示前两条边长度分别为a和b时,是否已经处理过,如果是的话就直接跳出。。。剩下的就是一个比较简单的搜索过程了,代码不难写,但是确实超时不可避免。。
#include
#include
#include
#include
#include
using namespace std;
const int maxn = 45;
int n,len[maxn],s;
double half,ans;
bool vis[maxn],mark[maxn][maxn];
bool cmp(int a,int b)
{
return a ans) ans = area;
return;
}
for(int i = cur+1; i
看了下别人的剪枝,确实比我拓展的节点要少,同样mark[i][a][b]表示第i条边时,最短边为a,次短边为b时,是否处理过。。。因为我自己写的mark[a][b]可能会出现重复的情况,因为a,b,c的大小关系并没有确定好,相同的三角形可能会出现三次,这样拓展出的新节点个数太多,会导致超时的。。。
#include
#include
using namespace std;
const int MAXN = 41;
int fence[MAXN];
bool mark[MAXN][MAXN * MAXN][MAXN * MAXN];
int N, s;
double hs;
void recur(int i, int a, int b, double &maxt)
{
if(a > s / 3 || mark[i][a][b])
{
return;
}
mark[i][a][b] = true;
if(i == N)
{
int c = s - a - b;
if(a > 0 && b > 0 && c > 0 && a c)
{
double t = (hs - a) * (hs - b) * (hs - c);
if(t > maxt)
{
maxt = t;
}
}
return;
}
recur(i + 1, a + fence[i], b, maxt);
recur(i + 1, a, b + fence[i], maxt);
recur(i + 1, a, b, maxt);
}
int main()
{
cin>>N;
s = 0;
for(int i = 0; i >fence[i];
s += fence[i];
}
hs = s * 1.0 / 2;
double maxt = -1;
recur(0, 0, 0, maxt);
if(maxt
服务器托管,北京服务器托管,服务器租用 http://www.fwqtg.net
机房租用,北京机房租用,IDC机房托管, http://www.fwqtg.net
相关推荐: R语言随机波动模型SV:马尔可夫蒙特卡罗法MCMC、正则化广义矩估计和准最大似然估计上证指数收益时间序列|附代码数据
全文链接:http://tecdat.cn/?p=31162 最近我们被客户要求撰写关于SV模型的研究报告,包括一些图形和统计输出 本文做SV模型,选取马尔可夫蒙特卡罗法(MCMC)、正则化广义矩估计法和准最大似然估计法估计。 模拟SV模型的估计方法: sim…