7-8 数字三角形 (31 分)(思路+详解+动态规划)Come Baby!!!!!!!!!!!
一:題目
觀察下面的數(shù)字金字塔。寫(xiě)一個(gè)程序查找從最高點(diǎn)到底部任意處結(jié)束的路徑,使路徑經(jīng)過(guò)數(shù)字的和最大。每一步可以從當(dāng)前點(diǎn)走到左下方的點(diǎn)也可以到達(dá)右下方的點(diǎn)。
在上面的樣例中,從13到8到26到15到24的路徑產(chǎn)生了最大的和86。
輸入格式:
第一個(gè)行包含R(1≤ R≤1000),表示行的數(shù)目。
后面每行為這個(gè)數(shù)字金字塔特定行包含的整數(shù)。
所有的被供應(yīng)的整數(shù)是非負(fù)的且不大于100。
輸出格式:
單獨(dú)的一行,包含那個(gè)可能得到的最大的和。
輸入樣例:
5 13 11 8 12 7 26 6 14 15 8 12 7 13 24 11輸出樣例:
86二:思路
思路:
1.分析動(dòng)態(tài)規(guī)劃:
本題當(dāng)中的求取最終結(jié)果依然是跳躍性的,也就是后面的選擇有可能要比前面好
故判定為動(dòng)態(tài)規(guī)劃
2.本題當(dāng)中可以將輸入的數(shù)據(jù)輸入二維數(shù)組當(dāng)中,將其放置在下三角形當(dāng)中
3.通過(guò)分析數(shù)據(jù) :我們可以得出一個(gè)遞推方程
就是每次和其上方和左上方所對(duì)應(yīng)的數(shù)相加,選取較大的數(shù)填寫(xiě)在網(wǎng)格當(dāng)中
m[i][j] = max(m[i-1][j]+m[i][j],m[i-1][j-1]+m[i][j])
4.然后就可以在最后一行選取一個(gè)較大的結(jié)果就是路徑和最大的值
5.本題的遞推方程思路和最長(zhǎng)公共子序列類(lèi)似,都是建好網(wǎng)格后找遞推方程
三:上碼
/**思路:1.分析動(dòng)態(tài)規(guī)劃:本題當(dāng)中的求取最終結(jié)果依然是跳躍性的,也就是后面的選擇有可能要比前面好故判定為動(dòng)態(tài)規(guī)劃2.本題當(dāng)中可以將輸入的數(shù)據(jù)輸入二維數(shù)組當(dāng)中,將其放置在下三角形當(dāng)中3.通過(guò)分析數(shù)據(jù) :我們可以得出一個(gè)遞推方程就是每次和其上方和左上方所對(duì)應(yīng)的數(shù)相加,選取較大的數(shù)填寫(xiě)在網(wǎng)格當(dāng)中m[i][j] = max(m[i-1][j]+m[i][j],m[i-1][j-1]+m[i][j])4.然后就可以在最后一行選取一個(gè)較大的結(jié)果就是路徑和最大的值 */ #include<bits/stdc++.h> using namespace std;int main(){int N;cin >> N;int a[N+1][N+1];//初始化數(shù)組a (升級(jí)新技能 不在寫(xiě)for循環(huán)進(jìn)行初始化了)memset(a,0,sizeof(a)); for(int i = 1; i <= N; i++){for(int j = 1; j <= i; j++){cin >> a[i][j];}}// for(int i = 0; i <= N; i++){ // for(int j = 0; j <= N; j++){ // cout << a[i][j] << ' '; // } // cout << endl; // }//開(kāi)始建立網(wǎng)格和更新for(int i = 1; i <= N; i++){for(int j = 1; j <= N; j++){a[i][j] = max(a[i][j] + a[i-1][j],a[i][j]+a[i-1][j-1]);}} int maxx = 0;for(int j = 1; j <= N; j++){maxx = max(maxx,a[N][j]);}cout << maxx;}四:總結(jié)
可能是思路相似,所以花了很短時(shí)間做出來(lái)了,許久沒(méi)有會(huì)因?yàn)橐坏李}開(kāi)心過(guò)了,我也本想想在家一樣天天刷一道題,寫(xiě)題解,但在學(xué)校,也就晚上寫(xiě)會(huì)兒算法題到10點(diǎn)就回宿舍了,不能像在一樣,想做到幾點(diǎn)就做到幾點(diǎn),而且算法題確實(shí)很難理解,但是其代碼,很簡(jiǎn)潔,讓人又愛(ài)又恨,還有就是確實(shí)很花時(shí)間,可能我太菜了,但菜雞正在成長(zhǎng),我們共勉,共同加油。我也有不會(huì)做的題,我的學(xué)習(xí)順序是先分析數(shù)據(jù),大概什么摸樣想清楚后,如果寫(xiě)不出碼,就先看視頻(去B站上),然后,再看一篇優(yōu)質(zhì)博客,把不會(huì)的學(xué)會(huì) ,可能一篇博客其中有大佬用的東西,你沒(méi)見(jiàn)過(guò),沒(méi)關(guān)系,那就去學(xué),把不會(huì)的學(xué)會(huì)綜合到一塊,我們會(huì)的不僅僅是一道題,這就好比分治算法,把一個(gè)大問(wèn)題轉(zhuǎn)化成一些小問(wèn)題,再對(duì)小問(wèn)題進(jìn)行求解,最后綜合小問(wèn)題的解就是大問(wèn)題的解,但我們?cè)趯W(xué)習(xí)過(guò)程中我們不僅僅回了這道題,還學(xué)會(huì)了一些其他東西,下次可能就會(huì)用上
,本題當(dāng)中的初始化數(shù)組memset(a,0,sizeof(a)),我以后會(huì)用上的,還有求取最大值直接調(diào)用一個(gè)max,不去寫(xiě)一個(gè)for循環(huán)+一個(gè)if判斷了,這是我前幾天寫(xiě)石子合并當(dāng)中學(xué)的,今天用到后,我就直接寫(xiě)出來(lái)了。可能是心情好點(diǎn),一下說(shuō)了這么多,
還是老樣子,加油陌生人!我們共同進(jìn)步!!!!!!!!!!!!!!!!!
總結(jié)
以上是生活随笔為你收集整理的7-8 数字三角形 (31 分)(思路+详解+动态规划)Come Baby!!!!!!!!!!!的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 苹果将放弃指纹识别技术 未来iPhone
- 下一篇: 7-5 流水作业调度 (10 分)(思路