现在的位置: 首页 > 综合 > 正文

1190

2012年12月07日 ⁄ 综合 ⁄ 共 631字 ⁄ 字号 评论关闭
这是关于搜素和剪枝的题目,做这类题目首先要确定剪枝的条件,不然就会超时了。

// 1190.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"


#include<iostream>
using namespace std;

int mins=10000000,lever,n,m;

int n3(int x)
{
	return (x+1)*(x+1)*x*x/4;
}

void f(int leftv,int floor,int lastr,int lasth,int s)
{
	if(s+2*leftv/lastr>=mins)
		return;
	if(leftv<n3(floor))
		return;
	if(floor==0)
	{
		if(leftv==0)
			mins=s;
		return;
	}
	int r,h,r2,maxh;
	for(r=lastr-1;r>=floor;r--)
	{
		r2=r*r;
		if(floor==m)
			s=r2;
		maxh=(leftv-n3(floor-1)/r2);
		if(maxh>lasth-1)
			maxh=lasth-1;
		for(h=maxh;h>=floor;h--)
			f(leftv-r2*h,floor-1,r,h,s+2*r*h);

	}

}
int main()
{
	cin>>n>>m;
	int sum=0;
	f(n,m,101,1000,0);
	if(mins>100000000)
		cout<<0;
	else
		cout<<mins<<endl;
	system("pause");
	return 0;
}

抱歉!评论已关闭.