問題如下:
ok,這道題非常簡單,樸素演算法我就不說了,書上也給出了樸素o(n^3)的**,但是同時也告訴我們還有更高效的演算法,我當時琢磨了一下,排序,確定其中兩個再用二分查詢可以的到乙個o(n^2logn)的演算法,但是同樣不高效。然後,然後.....
我發現這道題居然是一道貪心......
怎麼貪呢?
**如下:
#include#include#include#include#include#include#include#include#include#include#include#include#include#include#define ll long long;
const int inf=0x3f3f3f3f;
using namespace std;
const int maxn=1005;
int edge[maxn];
int main()
{ int n;
cin>>n;
for(int i=0;i=2;i--)
{if(edge[i]為什麼這個演算法是正確的呢?我們來證明一下
第一:edge[i],edge[i-1],edge[i-2]能構成三角形,不多說它肯定周長最大;
第二:如果它們不能構成,edge[i]為最大的三角形一定不能找到另外兩條使其構成三角形的邊,為什麼呢?相信你已經清楚了,那就是edge[i-1]+edge[i-2]>其他任意倆邊之和。
挑戰程式設計競賽(3)
給定整數a1,a2,an,判斷是否可以從中選出若干數,使他們的和恰好為k。1 n 20 1e8 ai 1e8 1e8 k 1e8 樣例1input 4 1 2 4 7 13 output yes 13 2 4 7 樣例2input 4 1 2 4 7 15 output no dfs include...
挑戰程式設計競賽 樹
二叉樹的表達 樹的遍歷 從根r到結點x的路徑長度為x的深度 depth 結點x到葉結點的最大路徑長度成為結點x的高。請編寫乙個程式,輸出給定有根樹t中各節點u的資訊。採用 左子右兄弟表示法 1 結點u的父節點 2 結點u最左側的子結點 3 結點u右側緊鄰的兄弟結點 引用u.parent即可知道結點u...
挑戰程式設計競賽 硬幣遊戲
首先明確此為0和博弈問題,我們始終以ali cealice alic e的觀點來看待問題。定義ali cealice alic e贏為可解.因此我們採用記憶化搜尋,整個搜尋空間最多為o x p o xp o xp 便可以解決此問題。include includeusing namespace std...