日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

c++ 动态规划(数塔)

發(fā)布時(shí)間:2025/7/14 c/c++ 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 c++ 动态规划(数塔) 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

c++ 動(dòng)態(tài)規(guī)劃(dp)

題目描述

觀察下面的數(shù)塔。寫一個(gè)程序查找從最高點(diǎn)到底部任意位置結(jié)束的路徑,使路徑經(jīng)過數(shù)字的和最大。
每一步可以從當(dāng)前點(diǎn)走到左下角的點(diǎn),也可以到達(dá)右下角的點(diǎn)。

輸入

5 13 11 8 12 7 26 6 14 15 8 12 7 13 24 11

輸出

86

AC代碼

#include <bits/stdc++.h> using namespace std; const int MAXN = 505; int dp[MAXN][MAXN],a[MAXN][MAXN]; int max(int a,int b)//max函數(shù)求兩個(gè)數(shù)字之間的最大值 {return a>b?a:b; } int main() {int n;cin >> n;for (int i = 1;i <= n;i ++)//輸入{for (int j = 1;j <= i;j ++){cin >> a[i][j];}}dp[1][1] = a[1][1];//把起點(diǎn)直接放在dp[]里面for (int i = 2;i <= n;i ++){for (int j = 1;j <= i;j ++){dp[i][j] = max(dp[i - 1][j - 1],dp[i - 1][j]) + a[i][j];//dp公式,原理是先走一步,然后掃描這個(gè)點(diǎn)的上一層的鄰接點(diǎn)看看哪個(gè)點(diǎn)的dp值最大,然后用最大值加上他本身}}int ans = 0;for (int i = 1;i <= n;i ++){ans = max(ans,dp[n][i]);//ans的作用是在最底部的元素中找一個(gè)最大的dp,輸出}cout << ans << endl;return 0; }

另外一種方法

#include <iostream> #include <string> #include <algorithm>//STL庫函數(shù) using namespace std; int main() {int t,n,dp[105][105],a[105][105];cin >> t;//t組數(shù)據(jù)while (t --)//重復(fù)執(zhí)行直到t組數(shù)據(jù)都處理完{cin >> n;//塔的層數(shù)for (int i = 1;i <= n;i ++)//輸入{for (int j = 1;j <= i;j ++){cin >> a[i][j];//把塔轉(zhuǎn)化成數(shù)組}}memset(dp,0,sizeof(dp));//把dp的值初始化為0for (int i = 1;i <= n;i ++)//把a(bǔ)[]最后一行賦值到dp[],因?yàn)樽詈笠恍械膁p[]就等于最后一行數(shù)本身{dp[n][i] = a[n][i];}for (int i = n - 1;i >= 1;i --){for (int j = 1;j <= i;j ++){dp[i][j] = max(dp[i + 1][j + 1],dp[i + 1][j]) + a[i][j];//dp公式,原理是掃描這個(gè)點(diǎn)的下一層的鄰接點(diǎn)看看哪個(gè)點(diǎn)的dp值最大,然后用最大值加上他本身,在把大的值選中}}}cout << dp[1][1] << endl;//輸出return 0; }

轉(zhuǎn)載于:https://www.cnblogs.com/LJA001162/p/11234619.html

總結(jié)

以上是生活随笔為你收集整理的c++ 动态规划(数塔)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。