拼三角形(csustoj2010

2021-09-25 22:42:05 字數 1249 閱讀 3534

拼三角形

description

cwolf9有n根木棍,他現在想將他們拼成一些三角形,問最多能拼成多少三角形,每根木棍只能用一次。

input

多組輸入

每組資料第一行乙個數 nn, (1 \leq n \leq 18)(1≤n≤18)。表示有n根木棍。

接下來一行,nn個數記為a_iai​

。表示第ii根木棍的長度為1\le a_i\le 1001≤ai​

≤100

output

對於每組資料每行輸出乙個數,表示用這nn根木棍可以拼出多少三角形。

sample input 1

62 2 3 4 5 6

62 3 8 2 3 9

52 3 3 4 5

sample output 122

1hint

nn不一定是3的倍數

思路:算是很裸的狀壓dp了,首先算出所有合法狀態,然後從所有合理的dp狀態中選擇不衝突的狀態轉移。一開始想的是排序後按順序a + b > c的取,但是按這個規則,2 2 3 4 6 6只能取2 3 4,但實際可以取,2 6 6,2 3 4。比賽的時候寫搜尋然後t了,賽後標程搜尋竟然只要4ms。。。

#include

#include

#include

#include

#include

#include

#include

#include

using

namespace std;

int state[

1<<18]

;int dp[

1<<18]

;int a[

100]

;int

main()

int cnt =0;

sort

(a,a + n)

;for

(int i =

0;i < n;i++)}

}}memset

(dp,-1

,sizeof

(dp));

int ans =0;

dp[0]

=0;for

(int i =

0;i <(1

<< n)

;i++)}

}}printf

("%d\n"

,ans);}

return0;

}

求大三角形中三角形個數

一道筆試程式設計題要求求乙個大三角形中所有小三角形的個數,大約是下面這種情況 首先想到是的將問題由求邊長為n的三角形個數 求邊長為n 1的三角形個數 求邊長為1的三角形個數 1,回溯求得所有三角形個數。但是再仔細一看因為有重疊三角形和倒置的三角形,所以這個方法不可行。接著找到三角形個數由三部分組成 ...

經典演算法 (三)帕斯卡三角形(楊輝三角形)

楊輝三角,是二項式係數在三角形中的一種幾何排列。在歐洲,這個表叫做帕斯卡三角形。帕斯卡 1623 1662 是在1654年發現這一規律的,比楊輝要遲393年,比賈憲遲600年。簡介 楊輝三角,是二項式係數在三角形中的一種幾何排列。在歐洲,這個表叫做帕斯卡三角形。帕斯卡 1623 1662 是在165...

三角形面積

算是自己第一道正式寫的演算法幾何吧,先從簡單的開始吧,加油!描述 給你三個點,表示乙個三角形的三個頂點,現你的任務是求出該三角形的面積 輸入 每行是一組測試資料,有6個整數x1,y1,x2,y2,x3,y3分別表示三個點的橫縱座標。座標值都在0到10000之間 輸入0 0 0 0 0 0表示輸入結束...