[蓝桥杯][算法提高VIP]夺宝奇兵(记忆化搜索||DP)
生活随笔
收集整理的這篇文章主要介紹了
[蓝桥杯][算法提高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,這兩種方法的思路都是一樣的。
記憶化搜索:
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)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Win10系统怎么使用上帝模式 Win1
- 下一篇: 最小花费(最短路变形+中南大学复试机试)