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教程

Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

AI Hentai Generator
Menjana ai hentai secara percuma.

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas
![Perkhidmatan Pusat Jagaan Acer masih dimulakan [Tetap]](https://img.php.cn/upload/article/000/465/014/171055772117927.jpg?x-oss-process=image/resize,m_fill,h_207,w_330)
Artikel ini akan membimbing anda untuk menyelesaikan masalah mesej ralat permulaan perkhidmatan Acer Care Center pada Windows PC. Apabila apl AcerCareCenter gagal dilancarkan dengan betul, ia biasanya kerana apl itu rosak, lapuk atau bercanggah dengan perisian lain. Betulkan Ralat Acer Care Center Masih Memulakan Jika anda melihat mesej ralat AcerCare Center Masih Memulakan pada PC Windows 11/10 anda, gunakan cadangan berikut untuk menyelesaikan isu: Mulakan semula proses ACCStd.exe Jalankan AcerCareCenter sebagai Pentadbir Lumpuhkan Antivirus anda buat sementara waktu perisian Semak status but bersih Pasang semula sokongan Acer Care Contact

Gunakan fungsi File.length() Java untuk mendapatkan saiz fail Saiz fail adalah keperluan yang sangat biasa apabila berurusan dengan operasi fail Java menyediakan cara yang sangat mudah untuk mendapatkan saiz fail, iaitu, menggunakan panjang(. ) kaedah kelas Fail. Artikel ini akan memperkenalkan cara menggunakan kaedah ini untuk mendapatkan saiz fail dan memberikan contoh kod yang sepadan. Pertama, kita perlu mencipta objek Fail untuk mewakili fail yang kita ingin dapatkan saiznya. Berikut ialah cara membuat objek Fail: Filef

Penjelasan terperinci tentang kaedah menukar jenis int kepada bait dalam PHP Dalam PHP, kita selalunya perlu menukar jenis integer (int) kepada jenis bait (Byte), seperti semasa berurusan dengan penghantaran data rangkaian, pemprosesan fail atau algoritma penyulitan . Artikel ini akan memperkenalkan secara terperinci cara menukar jenis int kepada jenis bait dan memberikan contoh kod khusus. 1. Hubungan antara jenis int dan bait Dalam medan komputer, jenis data asas int mewakili integer, manakala bait (Byte) ialah unit storan komputer, biasanya data binari 8-bit

Bagaimana untuk menggunakan kaedah permintaan PUT dalam jQuery? Dalam jQuery, kaedah menghantar permintaan PUT adalah serupa dengan menghantar jenis permintaan lain, tetapi anda perlu memberi perhatian kepada beberapa butiran dan tetapan parameter. Permintaan PUT biasanya digunakan untuk mengemas kini sumber, seperti mengemas kini data dalam pangkalan data atau mengemas kini fail pada pelayan. Berikut ialah contoh kod khusus menggunakan kaedah permintaan PUT dalam jQuery. Mula-mula, pastikan anda memasukkan fail perpustakaan jQuery, kemudian anda boleh menghantar permintaan PUT melalui: $.ajax({u

Dalam C++, pembolehubah jenis int hanya boleh menyimpan nilai integer positif atau negatif; Terdapat nilai terapung dan berganda tersedia untuk tujuan ini. Jenis data berganda dicipta untuk menyimpan perpuluhan sehingga tujuh digit selepas titik perpuluhan. Penukaran integer kepada jenis data berganda boleh dilakukan secara automatik oleh pengkompil (dipanggil penukaran "tersirat"), atau ia boleh diminta secara eksplisit oleh pengaturcara daripada pengkompil (dipanggil penukaran "eksplisit"). Dalam bahagian berikut, kami akan merangkumi pelbagai kaedah penukaran. Penukaran tersirat Pengkompil melakukan penukaran jenis tersirat secara automatik. Untuk mencapai matlamat ini, dua pembolehubah diperlukan - satu jenis titik terapung dan satu lagi jenis integer. Apabila kita hanya menetapkan nilai titik terapung atau pembolehubah kepada pembolehubah integer, pengkompil menjaga semua perkara lain

Borang borang dalam HiddenHttpMethodFilterhtml hanya menyokong permintaan GET dan POST, tetapi kaedah seperti DELETE dan PUT tidak disokong Spring 3 menambah penapis yang boleh menukar permintaan ini kepada kaedah http standard untuk menyokong permintaan GET, POST, PUT dan DELETE. @BeanpublicFilterRegistrationBeantestFilterRegistration3(){FilterRegistrationBeanregistration=newFilterRegistrationBea

Julat nilai int32 ialah dari -2 hingga kuasa ke-31 hingga 2 hingga kuasa ke-31 tolak 1, iaitu, -2147483648 hingga 2147483647. int32 ialah jenis integer bertanda, yang bermaksud ia boleh mewakili nombor positif, nombor negatif dan sifar Ia menggunakan 1 bit untuk mewakili bit tanda, dan baki 31 bit digunakan untuk mewakili nilai berangka. Oleh kerana satu bit digunakan untuk mewakili bit tanda, bilangan berkesan bit int32 ialah 31.

Di Java, int ialah jenis data bertanda 32-bit, dan pembolehubahnya memerlukan memori 32-bit julat sah jenis data int ialah -2147483648 hingga 2147483647, dan semua integer dalam julat ini dipanggil literal integer. Literal integer boleh diberikan kepada pembolehubah int, seperti "int num1 = 21;".
