国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

符號三角形-計算機(jī)算法設(shè)計與分析【1600+字解析 dfs全排列 列舉情況】【題意分析】【算法分析】【思路是怎么來的】【過程是什么】

這篇具有很好參考價值的文章主要介紹了符號三角形-計算機(jī)算法設(shè)計與分析【1600+字解析 dfs全排列 列舉情況】【題意分析】【算法分析】【思路是怎么來的】【過程是什么】。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報違法"按鈕提交疑問。

符號三角形問題:在一般情況下,符號三角形的第一行有n個符號。符號三角形問題要求,算法,深度優(yōu)先,圖論

下圖是由14個“+”和14個“-”組成的符號三角形。2個同號下面都是“+”,2個異號下面都是“-”。

在一般情況下,符號三角形的第一行有n個符號。符號三角形問題要求對于給定的n,計算有多少個不同的符號三角形,使其所含的“+”和“-”的個數(shù)相同。

題意分析

也就是 給了一個n數(shù)字

然后就會形成 第一行長度為n的三角形

然后用+ -號 把三角形填充

問是否可以用 + -號相等的數(shù)量 進(jìn)行填充三角形

可以有多少中方案???

思路過程分析

首先我們利用簡單的樣例分析
如果n=3
然后我們用一行為
+++分析 如果第一行是+++,根據(jù)+和-個數(shù)相等,剩下的符合只能是—

所以如下
+++
- -
-

如果是

+-+
--
+

++-
-+
-

由上總結(jié)出規(guī)律就是,如果第一行確定了,那么剩下的行都是根據(jù)上一行而確定的

也就是

+++  第一行都是+
第二行 就上 它的左上角和右上角
++-
+-+
-++
--+

根據(jù)這個規(guī)律就能構(gòu)圖了

所以我們那就先把第一行的所有情況都遍歷一邊,
然后把每次情況都構(gòu)圖一次,
記錄下+ -號的個數(shù)
看 + -號是不是各一半

算法分析

我們已經(jīng)知道 過程了

那么如何 寫出算法?

首先由于 要把第一行的所有情況都遍歷一邊

那么我們就是要用 dfs全排列方法遍歷

所以我們用dfs(t)t表示第一行中的位置
構(gòu)建第一行,

但是我們發(fā)現(xiàn),比如n = 100,t = 20時候,其實(shí)是可以把前20個所對應(yīng)下面的行構(gòu)建出來,并且如果這種情況下,如果-號或者+號已經(jīng)大于一半,那么就不可能是這種情況了,就直接剪紙了

比如 n = 3
++未知
-未知
未知

也就是如果知道前兩個是++
那么第二行的第一個也就知道了

這樣的算法就可以是優(yōu)化后的算法了

本題的思路 也就差不多了
直接上代碼文章來源地址http://www.zghlxwxcb.cn/news/detail-772588.html

//5-4 符號三角形問題
//0+  1-
#include <iostream>
using namespace std;
int n;//n行,第一行有n個元素 
int sum=0;//記錄滿足題意的數(shù)
int half;//n*(n+1)/4 
int cnt;//'-'的個數(shù)
int p[100][100]; //符號三角形矩陣 
void Output(){
	cout<<"------------\n";
	for(int i=1;i<=n;i++){
		for(int j=1;j<=n-i+1;j++){
			cout<<p[i][j]<<" ";
		}
		cout<<endl;
	}
} 
void BackTrack(int t){ //第t行 
//	cout<<"cnt="<<cnt<<" half="<<half<<endl;
	//正負(fù)號如果出現(xiàn) 一方>half
	if(cnt>half || (t*(t-1)/2-cnt)>half) return;
	if(t>n){
		Output(); 
		sum++;	
	}
	else{
		for(int i=0;i<=1;i++){
			p[1][t] = i;
			cnt += i;//'-'的個數(shù)
			for(int j=2;j<=t;j++){
				p[j][t-j+1] = p[j-1][t-j+1] ^ p[j-1][t-j+2];//^相同取0,不同取1 
				cnt+=p[j][t-j+1];
			}
			BackTrack(t+1);
			for(int j=2;j<=t;j++){
				cnt-=p[j][t-j+1];
			} 
			cnt -= i;
		}
	}
} 
int main(){
	cin>>n;
	half=n*(n+1)/2;//共有n*(n+1)/2個符號 
	
	if(half%2==1){  //奇數(shù)個符號的話,不存在'+'的個數(shù)等于'-'的個數(shù) 
		cout<<"無解\n";
	}
	else{
		half=half/2;
		BackTrack(1);
		cout<<"sum="<<sum<<endl;
	}

	return 0;
} 
/*
7
*/

到了這里,關(guān)于符號三角形-計算機(jī)算法設(shè)計與分析【1600+字解析 dfs全排列 列舉情況】【題意分析】【算法分析】【思路是怎么來的】【過程是什么】的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 雙指針?biāo)惴▽?shí)例5(有效三角形的個數(shù))

    給定一個包含非負(fù)整數(shù)的數(shù)組? nums ?,返回其中可以組成三角形三條邊的三元組個數(shù)。 示例 1: 示例 2: 提示: 1 = nums.length = 1000 0 = nums[i] = 1000 三角形構(gòu)成條件:任意兩邊之和一定要大于第三邊 其實(shí)在判斷中,只需要判斷 最小的兩邊和大于最長的一邊 即可 假設(shè) a=b=c 若要構(gòu)成

    2024年02月11日
    瀏覽(24)
  • 用動態(tài)規(guī)劃算法編程實(shí)現(xiàn)數(shù)字三角形問題

    用動態(tài)規(guī)劃算法編程實(shí)現(xiàn)數(shù)字三角形問題

    如下所示為一個數(shù)字三角形: 7 3 8 8 1 0 2 7 4 4 4 5 2 6 5 請編一個程序計算從頂至底的某一條路徑,使該路徑所經(jīng)過的數(shù)字的總和最大。 思路:建立兩個二位數(shù)組m(用來存儲數(shù)字三角形),sum(用來存儲數(shù)字三角形中每一個值得路徑值);sum[i] [j]從最后一行開始存儲; 如果當(dāng)前

    2024年02月11日
    瀏覽(20)
  • PCL 計算一個平面與一個三角形的交線

    這里實(shí)現(xiàn)一個很有趣的功能,就是獲取一個平面與一個三角形的交線,具體的思路很簡單,就是借助之前的博客中的思路:Matlab 計算一個平面與一條線段的交點(diǎn),我們只需要遍歷三角形中的所有邊即可獲取我們想要的交線,這里是PCL版本。

    2024年02月06日
    瀏覽(27)
  • 貪心算法求數(shù)組中能組成三角形的最大周長

    題目:三角形的最大周長 給定由一些正數(shù)(代表長度)組成的數(shù)組arr,返回由其中三個長度組成的、面積不為零的三角形的最大周長。 如果不能形成任何面積不為零的三角形,返回`0。 分析: 對數(shù)組排序,再從大到小選擇三個數(shù), 再判斷是否能構(gòu)成三角形,可以直接返回三數(shù)之

    2024年02月12日
    瀏覽(19)
  • 【算法專題突破】雙指針 - 有效三角形的個數(shù)(5)

    【算法專題突破】雙指針 - 有效三角形的個數(shù)(5)

    目錄 1. 題目解析 2. 算法原理 3. 代碼編寫 寫在最后: 題目鏈接:611. 有效三角形的個數(shù) - 力扣(Leetcode) ?我們可以根據(jù)示例1來理解這一道題目, 他說數(shù)組里面的數(shù)可以組成三角形三條邊的個數(shù), 那我們先自己枚舉一下所有情況看看: ?【2, 2, 3】 ?【2, 2, 4】 ?【2,

    2024年02月10日
    瀏覽(21)
  • pcl matlab 計算平面與空間三角形的交線

    pcl matlab 計算平面與空間三角形的交線

    ?過程: 單有法向量不能確定一個平面,至少還要有平面上的一個點(diǎn)的坐標(biāo)才行 假如知道法向量n=(A,B,C) 而平面過某點(diǎn)M=(x0,y0,z0) 那么平面的方程為 A(x-x0)+B(y-y0)+C(z-z0)=0 要在圖中畫出來,那么先要給x,y一個范圍 舉個離子,平面法向量(1,1,1)過點(diǎn)(0,1,2) 畫出x,y在 -2~2區(qū)

    2024年02月12日
    瀏覽(22)
  • 使用Python實(shí)現(xiàn)高效數(shù)據(jù)下采樣:詳解最大三角形三桶(LTTB)算法

    引言 在我們接觸大規(guī)模的數(shù)據(jù)集時,數(shù)據(jù)的數(shù)量往往會讓人望而卻步。數(shù)據(jù)分析、機(jī)器學(xué)習(xí)等領(lǐng)域的專業(yè)人員需要對這些數(shù)據(jù)進(jìn)行處理,以便更好地理解數(shù)據(jù),以及利用數(shù)據(jù)進(jìn)行預(yù)測。然而,處理大規(guī)模數(shù)據(jù)的計算成本往往非常高,這時候,就需要引入下采樣(Downsampling)的

    2024年02月14日
    瀏覽(29)
  • 【算法挨揍日記】day03——雙指針?biāo)惴╛有效三角形的個數(shù)、和為s的兩個數(shù)字

    【算法挨揍日記】day03——雙指針?biāo)惴╛有效三角形的個數(shù)、和為s的兩個數(shù)字

    ?? 611.?有效三角形的個數(shù) https://leetcode.cn/problems/valid-triangle-number/ 給定一個包含非負(fù)整數(shù)的數(shù)組? nums ?,返回其中可以組成三角形三條邊的三元組個數(shù)。 本題是一個關(guān)于三角形是否能成立的題目,首先我們假設(shè)三角形的三邊(a,b,c),我們要保證兩邊之和大于第三邊 ? ?題

    2024年02月12日
    瀏覽(22)
  • 算法分析與設(shè)計-數(shù)字三角形問題(動態(tài)規(guī)劃)(通俗易懂,附源碼和圖解,含時間復(fù)雜度分析)(c++)

    算法分析與設(shè)計-數(shù)字三角形問題(動態(tài)規(guī)劃)(通俗易懂,附源碼和圖解,含時間復(fù)雜度分析)(c++)

    (一)題目 問題描述 給定一個由 n n n 行數(shù)字組成的數(shù)字三角形,如圖所示。 試設(shè)計一個算法,計算從三角形的頂至底的一條路徑,使該路徑經(jīng)過的數(shù)字總和最大。 算法設(shè)計 對于給定的由 n n n 行數(shù)字組成的數(shù)字三角形,計算從該三角形的頂至底的路徑經(jīng)過的數(shù)字和的最大值

    2023年04月10日
    瀏覽(28)
  • 湘大 XTU OJ 1148 三角形 題解(非常詳細(xì)):根據(jù)題意樸素模擬+觀察樣例分析需要計算幾輪 具體到一般

    湘大 XTU OJ 1148 三角形 題解(非常詳細(xì)):根據(jù)題意樸素模擬+觀察樣例分析需要計算幾輪 具體到一般

    1148 三角形 題目描述 給一個序列, 按下面的方式進(jìn)行三角形累加,求其和值 。 比如序列為 1,2,3,4,5 輸入 有多組樣例。每個樣例的第一行是一個整數(shù)N( 1≤N≤100 ),表示序列的大小, 如果N為0表示輸入結(jié)束。這個樣例不需要處理。 第二行是N個整數(shù),每個整數(shù)處于[0,100]之間。

    2024年02月13日
    瀏覽(31)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包