http://poj.org/problem?id=1190

本文介绍了一种利用枚举搜索结合剪枝技术来求解特定几何问题的算法实现。通过递归深度优先搜索的方式,对圆柱体的半径和高度进行枚举,以寻找满足条件的最小侧面积。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

/*
此题是对半径和高的枚举搜索,但要进行剪枝 
*/
#include <iostream>
#include <cmath>
#include <cstdio>
#include <algorithm>
using namespace std;
int n,m,minv[21],mins[21],best;
void dfs(int M,int v,int s,int r,int h)
{
	int i,j,hmax;
	if(M==0) {
		if(v==n&&s<best) best=s;
		return ;
	}
	if(v+minv[M]>n||s+mins[M]>=best||2*(n-v)/r+s>=best) return ;
	//进行剪枝当前体积与剩下M层的最小体积大于n
	//侧面积与剩下M层的最小侧面积大于等于best
	/*剩下M层的侧面积为lefts=2*(r[k]*h[k]+...+r[m]*h[m]) , k=(M+1,..,m)
	lefts>2*(n-v)/r; lefts=best-s; 
	 */
	for(i=r-1;i>=M;i--)
	{
		if(M==m) s=i*i;
		hmax=min((n-v)/(i*i),h-1);
		for(j=hmax;j>=M;j--)
		dfs(M-1,v+i*i*j,s+2*i*j,i,j);
	}
}
int main(int argc, char *argv[])
{
	int i,rmax,hmax;
    minv[0]=0; mins[0]=0;
	for(i=1;i<21;i++)
	mins[i]=mins[i-1]+2*i*i,minv[i]=minv[i-1]+i*i*i;
	//数组mins,minv记录在该层的最小面积和体积,在等于i时取得; 
	while(cin>>n>>m)
	{
	rmax=sqrt(1.0*n)+1;
	hmax=n/(m*m)+1;
	best=1000000;
	dfs(m,0,0,rmax,hmax);
	if(best==1000000) best=0;
	cout<<best<<endl;
	}
	return 0;
}

资源下载链接为: https://pan.quark.cn/s/1bfadf00ae14 在 Linux 系统中,查找域名或主机名对应的 IP 地址是网络管理中的一项基础且关键任务,对于排查网络故障、调试网络问题以及监控网络服务是否正常运行等场景都非常重要。本文将介绍五种在 Linux 终端查询域名 IP 地址的方法。 首先,dig 命令(全称 Domain Information Groper)是一个功能强大的 DNS 查询工具,能够向 DNS 服务器发送查询请求并获取详细的响应信息。如果需要查询单个域名的 IP 地址,可以使用命令 dig 2daygeek.com +short 。此外,还可以通过编写 bash 脚本,将包含域名的文本文件中的域名逐个读取,然后利用 dig 命令进行查询,从而实现批量查询域名 IP 地址的功能。 其次,host 命令是一个简单易用的 DNS 查询工具,主要用于将域名解析为 IP 地址。要获取某个域名的 IP 地址,直接使用 host 2daygeek.com 即可。如果只想显示 IP 地址部分,可以通过管道结合 grep 和 sed 命令来实现,例如:host 2daygeek.com | grep "has address" | sed s/has address/-/g 。 再者,nslookup 命令也是一种常用的 DNS 查询工具,它支持交互式查询 DNS 信息。通过 nslookup 2daygeek.com 可以查询域名的 IP 地址。若要以非交互式的方式只显示 IP 地址,可以使用命令 nslookup 2daygeek.com | awk /^Address:/ {print $2} 。 另外,fping 命令与传统的 ping 命令不同,它不会直接进行 DNS 查询,而是通过发送 ICMP Echo Request(pi
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值