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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

P1004 方格取数

發布時間:2023/12/18 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 P1004 方格取数 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

題目描述
設有 N \times NN×N 的方格圖 (N \le 9)(N≤9),我們將其中的某些方格中填入正整數,而其他的方格中則放入數字 00。如下圖所示(見樣例):

A
0 0 0 0 0 0 0 0
0 0 13 0 0 6 0 0
0 0 0 0 7 0 0 0
0 0 0 14 0 0 0 0
0 21 0 0 0 4 0 0
0 0 15 0 0 0 0 0
0 14 0 0 0 0 0 0
0 0 0 0 0 0 0 0
B
某人從圖的左上角的 AA 點出發,可以向下行走,也可以向右走,直到到達右下角的 BB 點。在走過的路上,他可以取走方格中的數(取走后的方格中將變為數字 00)。
此人從 AA 點到 BB 點共走兩次,試找出 22 條這樣的路徑,使得取得的數之和為最大。

輸入格式
輸入的第一行為一個整數 NN(表示 N \times NN×N 的方格圖),接下來的每行有三個整數,前兩個表示位置,第三個數為該位置上所放的數。一行單獨的 00 表示輸入結束。

輸出格式
只需輸出一個整數,表示 22 條路徑上取得的最大的和。

輸入輸出樣例
輸入 #1 復制
8
2 3 13
2 6 6
3 5 7
4 4 14
5 2 21
5 6 4
6 3 15
7 2 14
0 0 0
輸出 #1 復制
67
說明/提示
NOIP 2000 提高組第四題

*這道題一開始看到就像用兩次dp來做,第一次走到終點,算出最大距離,并把走過的方格置為
0,然后第二次從起點開始再用一次dp.后來有個數據死活A不了,百思不得其解,下載了一組測試用例,在草稿紙上花了圖才知道求的不是最優解。

測試用例如下:
7
1 3 2
1 4 3
2 3 3
3 3 3
5 5 4
6 5 4
7 3 2
7 5 4
0 0 0

原本是要輸出 25 但是這個只能輸出23

兩次dp代碼如下:

#include <iostream> #include <cstring> using namespace std; int main() {int s[20][20];memset(s,0, sizeof(s));int dp[20][20]; //dp[i][j]表示(1,1)--(N,N)的最大值int N;cin>>N;int a,b,c;memset(dp,0, sizeof(dp));memset(s,0, sizeof(s));int sum=0;while(cin>>a>>b>>c&&a||b||c){s[a][b]=c;}int Max_i,Max_j;for(int i=1;i<=N;i++){for(int j=1;j<=N;j++){dp[i][j]=max(dp[i-1][j],dp[i][j-1])+s[i][j];if(i==N&&j==N){Max_i=dp[i-1][j]>dp[i][j-1] ? i-1:i;Max_j=dp[i-1][j]>dp[i][j-1] ? j:j-1;sum=dp[N][N];s[N][N]=0;}}}while((Max_i!=1||Max_j!=1)&&Max_i>=1&&Max_i<=N&&Max_j>=1&&Max_j<=N){s[Max_i][Max_j]=0;int temp_i=Max_i;int temp_j=Max_j;Max_i=dp[temp_i][temp_j-1]>dp[temp_i-1][temp_j] ? temp_i:temp_i-1;Max_j=dp[temp_i][temp_j-1]>dp[temp_i-1][temp_j] ? temp_j-1:temp_j;}s[1][1]=0;memset(dp,0, sizeof(dp));for(int i=1;i<=N;i++){for(int j=1;j<=N;j++){dp[i][j]=max(dp[i-1][j],dp[i][j-1])+s[i][j];} }sum=sum+dp[N][N];cout<<sum<<endl;return 0;}

下面我畫一張圖來解釋為什么不能兩次dp


上圖是上面那一組不能通過的測試用例,正確的走法是如下圖所示

這題我們要兩個人同時走,可能分別走也可以,是我沒想出來?

#include <iostream> #include <cstring> using namespace std;int main(){int s[20][20];memset(s,0, sizeof(s));int dp[20][20][20];int N;cin>>N;int a,b,c;memset(dp,0, sizeof(dp));memset(s,0, sizeof(s));while(cin>>a>>b>>c&&a||b||c){s[a][b]=c;}for(int k=2;k<=N+N;k++){for(int i1=1;i1<=N;i1++){for(int i2=1;i2<=N;i2++){if(k-i1<=N&&k-i1>=1&&k-i2<=N&&k-i2>=1){int temp=s[i1][k-i1];if(i1!=i2){temp+=s[i2][k-i2];}dp[k][i1][i2]=max(dp[k][i1][i2],dp[k-1][i1-1][i2-1]+temp);dp[k][i1][i2]=max(dp[k][i1][i2],dp[k-1][i1][i2-1]+temp);dp[k][i1][i2]=max(dp[k][i1][i2],dp[k-1][i1-1][i2]+temp);dp[k][i1][i2]=max(dp[k][i1][i2],dp[k-1][i1][i2]+temp);}}}}cout<<dp[N+N][N][N];return 0;}

總結

以上是生活随笔為你收集整理的P1004 方格取数的全部內容,希望文章能夠幫你解決所遇到的問題。

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

主站蜘蛛池模板: 牲欲强的熟妇农村老妇女视频 | 免费网站www在线观看 | 久久国产成人精品 | 国产亚洲电影 | 午夜精品区 | 午夜视频a | 一区二区在线免费看 | 草草影院网址 | 96精品| 激情综合五月天 | 欧美草逼网 | 91精品国产综合久 | 免费不卡毛片 | 激情五月在线观看 | 精品视频久久久久久 | 国产成年人视频 | 一区二区三区国产 | www日| 91在线欧美 | 男女激情免费网站 | 日韩欧美在线一区二区三区 | 人人妻人人藻人人爽欧美一区 | 性开放淫合集 | 九九综合九九 | 特级西西444www | 大伊人久久 | 在线观看成人黄色 | 黄色av免费网站 | 国产欧美一区二区精品性色 | 蜜桃视频日韩 | 欧美中文字幕在线观看 | 精品蜜桃av | 欧美日韩一区二区三区电影 | 亚洲一区电影网 | 国产乱淫av片免费 | 女人脱裤子让男人捅 | 91淫黄大片 | 你懂的在线视频网站 | 亚洲欧洲中文 | 国产一区在线不卡 | 久久久久久久久久av | 91久久电影 | 成人午夜视频在线免费观看 | 97碰碰碰 | 国产精品一区二区免费视频 | 少女忠诚电影高清免费 | 欧美日韩综合一区二区三区 | 夜夜草天天干 | 久艹av| 黑人巨大猛烈捣出白浆 | 99精品一区二区三区无码吞精 | 日本熟妇乱子伦xxxx | 亚洲精品大片www | 熟女高潮一区二区三区视频 | 国产视频一区二 | 三级成人网 | 97人人澡| 国产91一区在线精品 | 99热国| 日韩国产片 | 精品国产一级久久 | 亚洲av女人18毛片水真多 | 毛片视频网站 | 富婆如狼似虎找黑人老外 | 91色视频在线观看 | 三级全黄的视频 | 国产午夜成人久久无码一区二区 | 亚洲激情在线 | 日韩欧美国产精品 | 欧美在线一二 | 久久久久一区二区精码av少妇 | 久久精品无码专区免费 | 亚洲尤物在线 | 欧美精品自拍偷拍 | 日本一级淫片色费放 | 999zyz玖玖资源站永久 | 亚州一区二区 | 欧美国产一级片 | 日韩精品在线一区 | 中文字幕乱码人妻二区三区 | 国产免费脚交足视频在线观看 | www.桃色av嫩草.com | 青青草免费在线 | 国产三级自拍 | 久久这里只有精品9 | 91亚洲天堂 | 欧美 日韩 国产 成人 在线观看 | h视频在线免费看 | 男生尿隔着内裤呲出来视频 | 综合成人| 国产成人aaaa | 超碰在线98 | 天堂视频在线免费观看 | 欧美日韩国产第一页 | 夜夜精品视频 | 91色爱 | 婷婷激情综合网 | 男人操女人网站 | 国产偷人视频 |