《黑書》例題 三色多邊形

2022-04-28 15:54:15 字數 1380 閱讀 3744

這是一道遞迴題?倒不如說是模擬題,不知道是哪個(混蛋)學長和我說的,模擬題是最容易,容易個毛線........好吧,廢話不說了

思路:黑書上有它的思路p20,但我還是說說自己的想法吧。先是按照黑書的思路,要是可以將乙個n邊形的問題規模轉化為n-1,n-2......3,也就是說可以講符合條件的三角形切掉,然後再去找下乙個符合條件的三角形,再切掉.......但是有個問題,什麼時候不切了??

黑書中描述的很清楚,有一種特殊的情況,三種顏色,有一種顏色只出現一次,那麼我們可以以這種顏色為頂點,分切三角形.......例如:

這樣,就是遞迴的結束條件.........我的思路寫的很亂,具體的還是請去看黑書的吧......

**:

#include#include#include#includeusing namespace std;

char s[20000];

int a[20000],flag=0,n;

int dfs(char s)

if(i==0)

tmp=len-2;

else

tmp=len-1;

for(int j=i+2;j<=tmp;j++)

} return 1; //解決完後,你會發現所以情況都考慮了,就需要返回

} else if(b==1)

if(i==0)

tmp=len-2;

else

tmp=len-1;

for(int j=i+2;j<=tmp;j++)

} return 1;

} else if(g==1)

if(i==0)

tmp=len-2;

else

tmp=len-1;

for(int j=i+2;j<=tmp;j++)

} return 1;

} else

//這裡wa了一次,第乙個字元與最後乙個字元是相鄰的,但我一開始沒有考慮到它們是否相等

for(int i=0;i

if(s[i]==s[i+1])

for(int i=0;i

if(w==1||r==0||b==0||g==0) //要是r\b\g有為0的,說明肯定有相鄰相等的.....

for(int i=0;i

a[i]=i;

printf("%d\n",n-3); //將多邊形分為n-2個三角形,必然要n-3條邊

flag=0;

dfs(s);

} return 0;

}

凸多邊形三角劃分

傳送門 loj公升級版 這道題雖然是基礎的區間dp,但是還是很值得一說的。我們用dp i j 表示第i個點到第j個點劃分的最大值。注意我們只列舉了兩個端點,第三個頂點是我們列舉的那個k,之後發現k這個頂點可以把整個區間分成兩塊,我們就可以進行區間dp了。只不過這道題要使用高精度。需要自己過載一下,對...

三角形 多邊形面積求法

三點順序 給三個點a,b,c的座標,判斷能否組成乙個三角形 若能,判斷a,b,c是順時針給出的還是逆時針給出的?利用向量叉積判斷是逆時針還是順時針。三角形兩邊的向量分別是 ab x2 x1,y2 y1 ac x3 x1,y3 y1 則ab ac x2 x1 y3 y1 y2 y1 x3 x1 利用右...

三點順序及簡單多邊形

一 三點順序 思路 利用向量叉積 即叉乘 判斷是逆時針還是順時針 設a x1,y1 b x2,y2 c x3,y3 則三角形兩邊的向量分別是 ab x2 x1,y2 y1 ac x3 x1,y3 y1 則ab和ac的叉積為 2 2的行列式 x2 x1,y2 y1 x3 x1,y3 y1 值為 x2 ...