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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

蓝桥杯真题:跳跃

發(fā)布時(shí)間:2023/12/10 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 蓝桥杯真题:跳跃 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

輸入輸出樣例

示例 1

輸入

3 5 -4 -5 -10 -3 1 7 5 -9 3 -10 10 -2 6 -10 -4

輸出

15

運(yùn)行限制

  • 最大運(yùn)行時(shí)間:1s
  • 最大運(yùn)行內(nèi)存: 128M

這題是很典型的dp問題。畫圖可知,一個(gè)點(diǎn)可以到達(dá)以它為頂點(diǎn)的一個(gè)等腰直角三角形的區(qū)域位置,長這樣:

?其中圓圈是出發(fā)點(diǎn),方形是可以走到的點(diǎn)

那么一個(gè)點(diǎn)可以從哪里來呢?容易想到是這樣的:

所以對每個(gè)點(diǎn),我們的任務(wù)是挑選出上圖中圓圈里邊的最大值,然后與當(dāng)前的值相加就好了,自底向上的代碼實(shí)現(xiàn)如下所示:

#include <bits/stdc++.h> using namespace std; int dx[]={0,0,0,-1,-1,-1,-2,-2,-3}; int dy[]={-1,-2,-3,0,-1,-2,0,-1,0};int main() {// 請?jiān)诖溯斎肽拇aint n,m;scanf("%d%d",&n,&m);vector<vector<int>> dp(n,vector<int>(m,INT_MIN));for(int i=0;i<n;++i){for(int j=0;j<m;++j){scanf("%d",&dp[i][j]);int value=INT_MIN;for(int k=0;k<9;++k){int x=i+dx[k];int y=j+dy[k];if(x>=0 && y>=0){value=max(dp[x][y],value);}}if(value!=INT_MIN) dp[i][j]+=value;}}cout<<dp[n-1][m-1];return 0; }

當(dāng)然,感謝題解部分提供的遞歸寫法:

#include <bits/stdc++.h> using namespace std; int n,m; int dp(vector<vector<int>>&grid,vector<vector<int>>&memo,int x,int y){ int dx[] = {0,0,0,-1,-1,-1,-2,-2,-3}; int dy[] = {-1,-2,-3,0,-1,-2,0,-1,0}; //base case: if(x<0||y<0)return INT_MIN; if(x==0&&y==0)return grid[0][0]; if(memo[x][y]!=INT_MIN)return memo[x][y]; //condition transfer: int temp = INT_MIN; for(int i=0;i<9;i++){int q = dp(grid,memo,x+dx[i],y+dy[i]);if(q==INT_MIN)continue;temp = max(temp,q); }//備忘錄memo更新 memo[x][y] = temp + grid[x][y]; return memo[x][y]; } int main() {cin>>n>>m; //創(chuàng)建并賦值grid(方格)數(shù)組 vector<vector<int>>grid(n,vector<int>(m)); for(int i=0;i<n;i++){for(int j=0;j<m;j++){cin>>grid[i][j];} } //調(diào)用dp函數(shù)解決問題:vector<vector<int>> memo(n,vector<int>(m,INT_MIN)); cout<<dp(grid,memo,n-1,m-1); return 0; }

總結(jié)

以上是生活随笔為你收集整理的蓝桥杯真题:跳跃的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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