(SCU 1114 )數字三角

2021-08-05 21:42:18 字數 1261 閱讀 7147

下圖是個數字三角,請編寫乙個程式計算從頂部至底部某處一條路徑,使得該路徑所經過的數字總和最大。

3 88 1 0

2 7 4 4

1. 每一步可沿左斜線向下或右斜線向下走;

2. 1<=三角形行數<=100

3. 三角形中的數字為整數 0,1,……,99。

4. 如果有多種情況結果都最大,任意輸出一種即可。

第一行乙個整數n,代表三角形的行數。

接下來n行,描述了乙個數字三角。

第一行乙個整數,代表路徑所經過底數字總和。

第二行n個數,代表所經過的數字。

4

7 3 8

8 1 0

2 7 4 4

25 7 3 8 7

題目意思很簡單,關鍵是思路。我們從dp角度考慮,可設f[i][j]表示從三角形頂部到第i行第j列這個點所經過數字總和的最大值,那麼答案就是max。易得狀態轉移方程為:

f[i][j]=max+a[i][j](其中初值為f[1][1]=a[1][1]) 當然這裡還要考慮i,j的位置關係的限制導致轉移方程的不同,當(j==1)時,f[i][j]=f[i-1][j]+a[i][j];當(j==i)時,f[i][j]==f[i-1][j-1]+a[i][j]。弄清楚這些就不難解決這個問題了。

#include

#include

using

namespace

std;

const

int maxn=105;

int a[maxn][maxn],f[maxn][maxn];

int ans[maxn],n;//ans陣列用來記錄每一行所經過的那個數

void dp()

}int main()

else

if(f[i][tmp]>f[i][tmp-1]) ans[i]=a[i][tmp];

else

if(f[i][tmp]1])

}printf("%d\n",sum);

printf("%d",ans[1]);

for(int i=2;i<=n;i++) printf(" %d",ans[i]);

printf("\n");

}return

0;}

SCU 1114 數字三角

c 數字三角 time limit 0msmemory limit 0kb64bit io format lld llu submit status practice scu 1114 description 下圖是個數字三角,請編寫乙個程式計算從頂部至底部某處一條路徑,使得該路徑所經過的數字總和最...

SCU 1114 數字三角(dp)

題目思路 戳我戳我 這是一道dp的模板題,狀態轉移方程很容易想,唯一需要注意的就是怎麼把路徑列印出來 因為我們dp的時候其實是在遞迴的,此時我們並不知道選擇了下一層的哪個數字,可以考慮在dp的時候把每一層到底層的最大值儲存在陣列res中,這樣第i層選擇的數字就是res i res i 1 最後列印出...

螺旋列印三角數字矩陣

藍橋杯 程式設計 滿分15分 方陣的主對角線之上稱為 上三角 請你設計乙個用於填充n 階方陣的上三角區域的程式。填充的規則是 使用1,2,3 的自然數列,從左上角開始,按照順時針方向螺旋填充。例如 當n 3 時,輸出 1 2 3 6 4當n 4 時,輸出 1 2 3 4 9 10 5 8 6 當n ...