uva10012 不是你想象的那么简单的
道题第一次做以为是一般的回溯题,最初的思路就是将各圆形全排列,放置新圆的时候让其与前一个圆相切,最后通过回溯得到矩形的最小size。十几分钟编完后结果WA,想了好一会发现问题所在,不能只让其与前一个圆相切(如果第一个圆很大,半径比方说是100,第二个圆很小,半径是1,第三个圆也很大,半径同样是100,放第三个圆的时候如果是和第二个圆相切则必定会与第一个圆相交,就不可以了)。然后就开始修改代码,然后就遇到了各种错误,断断续续地弄了一晚上加一上午。
首先想的是每次放一个圆形的时候还是先让其与前一个放置的圆相切,然后判断它与再之前放的圆是否相交,如不相交,则说明这样放是正确且最节省距离的,如果有任何一个圆与其相交,则说明不能与前一个圆相切,就再往前推一个,让其与前前个圆相切,再判断是否和别的圆相交。。。为了判断是否相交,增加了一个center数组存储各圆的圆心位置。到此思路很正确很清晰,然后遇到了三个Wa的点。
WA1:判断矩形最小size的时候不能用最后一个圆的最右侧位置了,因为有可能最后一个圆很小,其最右侧的位置还不如其前一个圆的最右侧位置远,所以改用判断各圆圆心位置+半径的最大值作为矩形的最小size。
WA2:在放置前几个圆的时候注意不能让圆的圆心位置-圆的半径<0。比如说第一个圆半径是1,第二个元半径100,放第二个元就不能让其与第一个圆相切因为那样圆的左边就超出矩形盒子的壁了!
WA3:主函数中MinL设置的太小,估计测试数据的数有很大的,题目没有说半径最大是多少,开始设的是65536,结果WA,改成DBL_MAX就AC了!!
#include#include#include#include#includeusing namespace std; int m,Put[10]; //Put[i]:放置的第i个圆的编号 double MinL,size[10],center[10];//size[i]:编号为i的圆的半径;center[i]:放置的第i个圆的圆心位置 bool vis[10]; double getlen(int a,int b) //计算两圆心间的距离 { return sqrt((size[a]+size[b])*(size[a]+size[b])-(size[a]-size[b])*(size[a]-size[b])); } bool isok(int a,int b) //是否和之前放的圆相交 { for (int i=0;i<b;i++) { if (sqrt((center[i]-center[a])*(center[i]-center[a])+(size[Put[i]]-size[Put[a]])*(size[Put[i]]-size[Put[a]]))<(size[Put[i]]+size[Put[a]])) return false; } return true; } void dfs(int cur) { int i,j; if (cur==m) { double maxsize=0; for (int k=0;kmaxsize) maxsize=center[k]+size[Put[k]]; } if (maxsize<MinL) MinL=maxsize; } else { for (i=0;i=0;j--) { tmpl=getlen(Put[j],i); center[cur]=center[j]+tmpl; if (center[cur]-size[Put[cur]]>n; while(n--) { cin>>m; MinL=DBL_MAX; memset(vis,0,sizeof(vis)); for (int i=0;i>size[i]; for (int i=0;i<m;i++) { Put[0]=i; center[0]=size[i]; vis[i]=1; dfs(1); vis[i]=0; } cout<<fixed<<setprecision(3)<<MinL<<endl; } return 0; }
【相关教程推荐】
2. php从入门到精通
3. bootstrap教程

Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

AI Hentai Generator
Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen


![Der Acer Care Center-Dienst wird immer noch initialisiert [Behoben]](https://img.php.cn/upload/article/000/465/014/171055772117927.jpg?x-oss-process=image/resize,m_fill,h_207,w_330)
Dieser Artikel hilft Ihnen bei der Lösung des Problems der Fehlermeldung bei der Initialisierung des Acer Care Center-Dienstes auf einem Windows-PC. Wenn die AcerCareCenter-App nicht ordnungsgemäß gestartet wird, liegt dies normalerweise daran, dass die App beschädigt oder veraltet ist oder mit anderer Software in Konflikt steht. Behebung des Fehlers „Der Acer Care Center-Dienst wird immer noch initialisiert“ Wenn auf Ihrem Windows 11/10-PC die Fehlermeldung „Der AcerCare Center-Dienst wird immer noch initialisiert“ angezeigt wird, verwenden Sie die folgenden Vorschläge, um das Problem zu beheben: Starten Sie den ACCStd.exe-Prozess neu. Führen Sie AcerCareCenter als Administrator aus. Deaktivieren Sie Ihr Antivirenprogramm vorübergehend Software Überprüfen Sie den Clean-Boot-Status. Installieren Sie Acer Care neu. Kontaktieren Sie den Support

Verwenden Sie die File.length()-Funktion von Java, um die Größe einer Datei zu ermitteln. Die Dateigröße ist eine sehr häufige Anforderung beim Umgang mit Dateioperationen. Java bietet eine sehr praktische Möglichkeit, die Größe einer Datei zu ermitteln, d. h. mithilfe der Länge(. )-Methode der File-Klasse. In diesem Artikel wird erläutert, wie Sie mit dieser Methode die Größe einer Datei ermitteln und entsprechende Codebeispiele angeben. Zuerst müssen wir ein File-Objekt erstellen, um die Datei darzustellen, deren Größe wir ermitteln möchten. So erstellen Sie ein File-Objekt: Filef

Ausführliche Erläuterung der Methode zum Konvertieren des Int-Typs in Byte in PHP. In PHP müssen wir häufig den Integer-Typ (int) in den Byte-Typ (Byte) konvertieren, beispielsweise wenn es um Netzwerkdatenübertragung, Dateiverarbeitung oder Verschlüsselungsalgorithmen geht . In diesem Artikel wird detailliert beschrieben, wie der Typ int in den Typ byte konvertiert wird, und es werden spezifische Codebeispiele bereitgestellt. 1. Die Beziehung zwischen int-Typ und Byte Im Computerbereich stellt der grundlegende Datentyp int eine Ganzzahl dar, während Byte (Byte) eine Computerspeichereinheit ist, normalerweise 8-Bit-Binärdaten

Wie verwende ich die PUT-Anfragemethode in jQuery? In jQuery ähnelt die Methode zum Senden einer PUT-Anfrage dem Senden anderer Arten von Anfragen, Sie müssen jedoch auf einige Details und Parametereinstellungen achten. PUT-Anfragen werden normalerweise zum Aktualisieren von Ressourcen verwendet, beispielsweise zum Aktualisieren von Daten in einer Datenbank oder zum Aktualisieren von Dateien auf dem Server. Das Folgende ist ein spezifisches Codebeispiel, das die PUT-Anforderungsmethode in jQuery verwendet. Stellen Sie zunächst sicher, dass Sie die jQuery-Bibliotheksdatei einschließen. Anschließend können Sie eine PUT-Anfrage senden über: $.ajax({u

In C++ können Variablen vom Typ int nur positive oder negative Ganzzahlwerte enthalten; sie können keine Dezimalwerte enthalten. Hierfür stehen Float- und Double-Werte zur Verfügung. Der Datentyp double wurde erstellt, um Dezimalzahlen mit bis zu sieben Nachkommastellen zu speichern. Die Konvertierung einer Ganzzahl in einen Double-Datentyp kann automatisch vom Compiler durchgeführt werden (sogenannte „implizite“ Konvertierung) oder sie kann vom Programmierer explizit vom Compiler angefordert werden (sogenannte „explizite“ Konvertierung). In den folgenden Abschnitten werden wir verschiedene Konvertierungsmethoden behandeln. Implizite Konvertierungen Der Compiler führt implizite Typkonvertierungen automatisch durch. Um dies zu erreichen, sind zwei Variablen erforderlich – eine vom Typ Gleitkomma und die andere vom Typ Ganzzahl. Wenn wir einer Ganzzahlvariablen einfach einen Gleitkommawert oder eine Variable zuweisen, kümmert sich der Compiler um alle anderen Dinge

Das Formular in HiddenHttpMethodFilterhtml unterstützt nur GET- und POST-Anfragen, Methoden wie DELETE und PUT werden jedoch nicht unterstützt. Spring 3 fügt einen Filter hinzu, der diese Anfragen in Standard-HTTP-Methoden umwandeln kann, sodass GET-, POST-, PUT- und DELETE-Anfragen möglich sind unterstützt. @BeanpublicFilterRegistrationBeantestFilterRegistration3(){FilterRegistrationBeanregistration=newFilterRegistrationBea

Der Wertebereich von int32 reicht von -2 bis 31. Potenz bis 2 bis 31. Potenz minus 1, also -2147483648 bis 2147483647. int32 ist ein vorzeichenbehafteter Ganzzahltyp, was bedeutet, dass er positive Zahlen, negative Zahlen und Nullen darstellen kann. Er verwendet 1 Bit zur Darstellung des Vorzeichenbits und die restlichen 31 Bits werden zur Darstellung des numerischen Werts verwendet. Da ein Bit zur Darstellung des Vorzeichenbits verwendet wird, beträgt die effektive Anzahl der int32-Bits 31.

Die Anzahl der vom Typ int belegten Bytes kann je nach Programmiersprache und Hardwareplattform variieren. Detaillierte Einführung: 1. In der C-Sprache belegt der int-Typ normalerweise 2 Bytes oder 4 Bytes. In 32-Bit-Systemen belegt der Typ int 4 Bytes, während der Typ int in 16-Bit-Systemen 2 Bytes belegt. In einem 64-Bit-System kann der Typ int 8 Bytes belegen 2. In Java belegt der Typ int normalerweise 4 Bytes, während der Typ int in Python keine Bytebeschränkung hat und automatisch angepasst werden kann usw.
