P1284 三角形牧場

来源:http://www.cnblogs.com/zwfymqz/archive/2017/07/02/7106873.html
-Advertisement-
Play Games

題目描述 和所有人一樣,奶牛喜歡變化。它們正在設想新造型的牧場。奶牛建築師Hei想建造圍有漂亮白色柵欄的三角形牧場。她擁有N(3≤N≤40)塊木板,每塊的長度Li(1≤Li≤40)都是整數,她想用所有的木板圍成一個三角形使得牧場面積最大。 請幫助Hei小姐構造這樣的牧場,並計算出這個最大牧場的面積。 ...


題目描述

和所有人一樣,奶牛喜歡變化。它們正在設想新造型的牧場。奶牛建築師Hei想建造圍有漂亮白色柵欄的三角形牧場。她擁有N(3≤N≤40)塊木板,每塊的長度Li(1≤Li≤40)都是整數,她想用所有的木板圍成一個三角形使得牧場面積最大。

請幫助Hei小姐構造這樣的牧場,並計算出這個最大牧場的面積。

輸入輸出格式

輸入格式:

 

第1行:一個整數N

第2..N+1行:每行包含一個整數,即是木板長度。

 

輸出格式:

 

僅一個整數:最大牧場面積乘以100然後舍尾的結果。如果無法構建,輸出-1。

 

輸入輸出樣例

輸入樣例#1:
5
1
1
3
3
4
輸出樣例#1:
692

說明

樣例解釋:692=舍尾後的(100×三角形面積),此三角形為等邊三角形,邊長為4。

 


我們把三角形的三條邊當做搜索的變數。
那麼當我們知道其中兩個邊的長度的話,就可以推出第三條邊的長度。
對於每一個木棒,我們都有三種策略
1.加到第一條邊
2.加到第二條邊
3.加到第三條邊。
然後暴力記憶化搜索就好了!

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<cstring>
 4 #include<cmath>
 5 #include<queue>
 6 #include<algorithm>
 7 #include<map>
 8 #define lli long long int 
 9 using namespace std;
10 const int MAXN=10000001;
11 void read(int &n)
12 {
13     char c='+';int x=0;bool flag=0;
14     while(c<'0'||c>'9')
15     {c=getchar();if(c=='-')flag=1;}
16     while(c>='0'&&c<='9')
17     {x=x*10+(c-48);c=getchar();}
18     flag==1?n=-x:n=x;
19 }
20 int n;
21 int fi,se;
22 int vis[MAXN];
23 int sum=0;
24 int a[MAXN];
25 int happen[MAXN];
26 double ans=-1;
27 map<string,bool>mp;
28 double calc(double yi,double er,double san)
29 {
30     if(min(min(yi,er),min(er,san))+min(min(yi,er),min(er,san))>max(max(yi,er),max(er,san)))
31     {
32         double p=(yi+er+san)/2;
33         return sqrt(p*(p-yi)*(p-er)*(p-san));    
34     }
35     else
36     return -1;
37 }
38 int comp(const int a,const int b)
39 {
40     return a<b;
41 }
42 void dfs(int yi,int er,int san)
43 {
44     if(happen[yi*1500+er*150+san])
45         return ;
46     happen[yi*1500+er*150+san]=1;
47     if(yi+er+san==sum&&yi!=0&&er!=0&&san!=0)
48     {
49         double hh=calc(yi,er,san);
50         if(hh>ans)
51         ans=calc(yi,er,san);
52     }
53         
54     for(int i=1;i<=n;i++)
55     {
56         if(vis[i]==0)
57         {
58             vis[i]=1;
59             dfs(yi+a[i],er,sum-(yi+a[i]+er));
60             dfs(yi,er+a[i],sum-(yi+er+a[i]));
61             vis[i]=0;
62             dfs(yi,er,sum-(yi+er));
63         }
64     }
65 }
66 int main()
67 {
68     
69     read(n);
70     for(int i=1;i<=n;i++)
71     {
72         read(a[i]); sum+=a[i];    
73     }
74     sort(a+1,a+n+1,comp);// 排序是為了方便調試 
75     dfs(0,0,0);
76     if(ans==-1)
77     { printf("-1"); return 0;}
78     ans=ans*100.0;
79     printf("%d",(int)ans);
80     return 0;
81 }

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 題目描述 在平面上有 n 個點(n <= 50),每個點用一對整數坐標表示。例如:當 n=4 時,4個點的坐標分另為:p1(1,1),p2(2,2),p3(3,6),P4(0,7),見圖一。 這些點可以用 k 個矩形(1<=k<=4)全部覆蓋,矩形的邊平行於坐標軸。當 k=2 時,可用如圖二的兩個矩 ...
  • 1.什麼是面向對象 面向對象(oop)是一種抽象的方法來理解這個世界,世間萬物都可以抽象成一個對象,一切事物都是由對象構成的。應用在編程中,是一種開發程式的方法,它將對象作為程式的基本單元。 2.面向對象與面向過程的區別 我們之前已經介紹過面向過程了http://www.cnblogs.com/zh ...
  • 網站爬蟲,主要是爬博客http://www.cnblogs.com/xxxx下的所有文章內容及標題,保存到data目錄下。具體如下: ...
  • 共用模式acquire實現流程 上文我們講解了AbstractQueuedSynchronizer獨占模式的acquire實現流程,本文趁熱打鐵繼續看一下AbstractQueuedSynchronizer共用模式acquire的實現流程。連續兩篇文章的學習,也可以對比獨占模式acquire和共用模 ...
  • C++相對於C語言而言支持函數重載是其極大的一個特點,相信在使用C語言的時候大家如果要寫一個實現兩個整型數據相加的函數還要寫一個浮點型數據相加的函數,那麼這兩個函數的名字絕對不可以一樣,這樣無疑在我們使用這個函數的時候增加了複雜性,但是在C++中我們卻可以很好的解決這個問題,因為在C++中函數是支持 ...
  • 需求:當進行文件長傳保存等操作時,能在頁面顯示一個帶百分比的進度條,給用戶一個好的交互體驗 實現步驟 JSP頁面 1.添加table標簽 這個table標簽要隱藏,進度條執行的時候再顯示。id為tdOne和tdTwo分別為進度條的藍色和灰色區域。 2.添加js代碼 當點擊保存時,執行loading( ...
  • 2、列表簡介 Python內置的一種數據類型是列表:list。 list是一種有序的集合。 列表由一系列按特定順序排列的元素組合。用 [ ] 來表示。 list裡面的元素的數據類型也可以不同,比如: >>> L = ['Apple', 123, True] 2.1索引列表 從0開始而不是1。當索引超 ...
  • 題目描述 香穗子在田野上調蘑菇!她跳啊跳,發現自己很無聊,於是她想了一個有趣的事情,每個格子最多只能經過1次,且每個格子都有其價值 跳的規則是這樣的,香穗子可以向上下左右四個方向跳到相鄰的格子,並且她只能往價值更高(這裡是嚴格的大於)的格子跳. 香穗子可以從任意的格子出發,在任意的格子結束, 那麼她 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...