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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

[蓝桥杯][算法提高VIP]夺宝奇兵(记忆化搜索||DP)

發布時間:2023/12/15 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 [蓝桥杯][算法提高VIP]夺宝奇兵(记忆化搜索||DP) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

題目描述
在一座山上,有很多很多珠寶,它們散落在山底通往山頂的每條道路上,不同道路上的珠寶的數目也各不相同.下圖為一張藏寶地圖:

7
3 8
8 1 0
2 7 4 4
4 5 2 6 5

”奪寶奇兵”從山下出發,到達山頂,如何選路才能得到最多的珠寶呢?在上圖所示例子中,按照5-> 7-> 8-> 3-> 7的順序,將得到最大值30
輸入
第一行正整數N(100> =N> 1),表示山的高度
接下來有N行非負整數,第i行有i個整數(1< =i< =N),表示山的第i層上從左到右每條路上的珠寶數目
輸出
一個整數,表示從山底到山頂的所能得到的珠寶的最大數目.
樣例輸入
5
7
3 8
8 1 0
2 7 4 4
4 5 2 6 5
樣例輸出
30
思路:dp[i][j]代表的是(i,j)從底向上能獲得的珠寶最大數目。兩種做法,記憶化搜索||DP,這兩種方法的思路都是一樣的。
記憶化搜索:

#include<bits/stdc++.h> #define ll long long using namespace std;const int maxx=1e2+10; int dp[maxx][maxx]; int a[maxx][maxx]; int n;inline void dfs(int x,int y) {if(dp[x][y]!=-1) return ;if(y>x) return ;if(x==n){dp[n][y]=a[n][y];return ;}int s=0;dfs(x+1,y);dfs(x+1,y+1);dp[x][y]=max(dp[x+1][y],dp[x+1][y+1])+a[x][y]; } int main() {while(~scanf("%d",&n)){for(int i=1;i<=n;i++) for(int j=1;j<=i;j++) scanf("%d",&a[i][j]);memset(dp,-1,sizeof(dp));dfs(1,1);cout<<dp[1][1]<<endl;}return 0; }

DP

#include<bits/stdc++.h> #define ll long long using namespace std;const int maxx=2e2+10; int a[maxx][maxx]; int b[maxx][maxx]; int n;int main() {scanf("%d",&n);for(int i=1;i<=n;i++){for(int j=1;j<=i;j++) scanf("%d",&a[i][j]);}memset(b,-1,sizeof(b));b[1][1]=a[1][1];for(int i=2;i<=n;i++){for(int j=1;j<=i;j++){b[i][j]=a[i][j]+max(b[i-1][j],b[i-1][j-1]);}}int ans=-1;for(int i=1;i<=n;i++) ans=max(ans,b[n][i]);cout<<ans<<endl;return 0; }

努力加油a啊

創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

總結

以上是生活随笔為你收集整理的[蓝桥杯][算法提高VIP]夺宝奇兵(记忆化搜索||DP)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。