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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

Labyrinth

發(fā)布時(shí)間:2025/3/15 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Labyrinth 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

Labyrinth

Time Limit: 2000/1000 MS (Java/Others)????Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 152????Accepted Submission(s): 76

Problem Description 度度熊是一只喜歡探險(xiǎn)的熊,一次偶然落進(jìn)了一個(gè)m*n矩陣的迷宮,該迷宮只能從矩陣左上角第一個(gè)方格開始走,只有走到右上角的第一個(gè)格子才算走出迷宮,每一次只能走一格,且只能向上向下向右走以前沒有走過的格子,每一個(gè)格子中都有一些金幣(或正或負(fù),有可能遇到強(qiáng)盜攔路搶劫,度度熊身上金幣可以為負(fù),需要給強(qiáng)盜寫欠條),度度熊剛開始時(shí)身上金幣數(shù)為0,問度度熊走出迷宮時(shí)候身上最多有多少金幣?


Input 輸入的第一行是一個(gè)整數(shù)T(T < 200),表示共有T組數(shù)據(jù)。
每組數(shù)據(jù)的第一行輸入兩個(gè)正整數(shù)m,n(m<=100,n<=100)。接下來的m行,每行n個(gè)整數(shù),分別代表相應(yīng)格子中能得到金幣的數(shù)量,每個(gè)整數(shù)都大于等于-100且小于等于100。


Output 對(duì)于每組數(shù)據(jù),首先需要輸出單獨(dú)一行”Case #?:”,其中問號(hào)處應(yīng)填入當(dāng)前的數(shù)據(jù)組數(shù),組數(shù)從1開始計(jì)算。
每組測試數(shù)據(jù)輸出一行,輸出一個(gè)整數(shù),代表根據(jù)最優(yōu)的打法,你走到右上角時(shí)可以獲得的最大金幣數(shù)目。


Sample Input 2 3 4 1 -1 1 0 2 -2 4 2 3 5 1 -90 2 2 1 1 1 1


Sample Output Case #1: 18 Case #2: 4


Source 2014年百度之星程序設(shè)計(jì)大賽
– 資格賽

題目:http://acm.hdu.edu.cn/showproblem.php?pid=4826


思路:搜索的話,搜索空間太大,耗時(shí)太多。

DP:問題有最優(yōu)子結(jié)構(gòu)的性質(zhì)。題目中說可以向右或者上下走,但是不能重復(fù)走,所以從左向右更新,但是只能從上往下或者從下往上單向更新。



代碼有點(diǎn)冗余,可能是因?yàn)椴唤?jīng)常練習(xí)。

還有就是dp數(shù)組可以開成一維的。



#include <bits/stdc++.h>
using namespace std;
#define MAXN 101
#define MIN -110000000
int dp[MAXN][MAXN] ;
int arr[MAXN][MAXN];
int main(){


? ? int N;
? ? cin >>N;
? ? int NN = N ;
? ? while (N-- > 0){
? ? ? ? int m , n ;
? ? ? ? cin>>m>>n;
? ? ? ? for(int i =0 ; i < m ; ++i){
? ? ? ? ? ? for(int j = 0 ; j < n ; ++j){
? ? ? ? ? ? ? ? cin>>arr[i][j];
? ? ? ? ? ? ? ? dp[i][j] = MIN;
? ? ? ? ? ? }
? ? ? ? }
? ? ? ? for (int j = 0 ; j < n ;++j)
? ? ? ? {
? ? ? ? ? ? if (j!=0 && j != n-1){
? ? ? ? ? ? ? ? for (int i = 0 ; i < m ; ++i){


? ? ? ? ? ? ? ? ? ? dp[i][j] = dp[i][j-1]+arr[i][j];
? ? ? ? ? ? ? ? ? ? if(i != 0)
? ? ? ? ? ? ? ? ? ? dp[i][j] = max(dp[i][j] ,dp[i-1][j]+arr[i][j]);
? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? int dptemp[MAXN];
? ? ? ? ? ? ? ? for (int i = m-1 ; i >= 0 ?; --i){
? ? ? ? ? ? ? ? ? ? dptemp[i] = dp[i][j-1]+arr[i][j];
? ? ? ? ? ? ? ? ? ?if (i!=m-1){
? ? ? ? ? ? ? ? ? ? dptemp[i] = max(dptemp[i] , dptemp[i+1]+arr[i][j]);
? ? ? ? ? ? ? ? ? ?}
? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? for (int i = 0 ; i < m ; ++i)
? ? ? ? ? ? ? ? ? ? dp[i][j] = max(dp[i][j] , dptemp[i]);
? ? ? ? ? ? }else {
? ? ? ? ? ? ? ? if (j==0){
? ? ? ? ? ? ? ? ? ? ? ? dp[0][0] =arr[0][0];
? ? ? ? ? ? ? ? ? ? ?for (int i = 0 ; i < m ; ++i){
? ? ? ? ? ? ? ? ? ? //dp[i][j] = max(dp[i][j-1]+arr[i][j];
? ? ? ? ? ? ? ? ? ? if(i != 0)
? ? ? ? ? ? ? ? ? ? dp[i][j] = max(dp[i][j] ,dp[i-1][j]+arr[i][j]);
? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? }else{
? ? ? ? ? ? ? ? ?for (int i = m-1 ; i >= 0 ?; --i){
? ? ? ? ? ? ? ? ? ? dp[i][j] = max(dp[i][j-1]+arr[i][j],dp[i][j]);
? ? ? ? ? ? ? ? ? ? if(i != m-1)
? ? ? ? ? ? ? ? ? ? dp[i][j] = max(dp[i][j] ,dp[i+1][j]+arr[i][j]);
? ? ? ? ? ? ? ? }


? ? ? ? ? ? ? ? }


? ? ? ? ? ? }
? ? ? ? }
// ? ? ? ?for (int i = 0 ; i < m ; ++i){
// ? ? ? ? ? ?for(int j =0 ; j < n ; ++j){
// ? ? ? ? ? ? ? ?cout<<dp[i][j];
// ? ? ? ? ? ?if (j==n-1)
// ? ? ? ? ? ? ? ?cout<<endl;
// ? ? ? ? ? ?else
// ? ? ? ? ? ? ? ?cout<<" ";
// ? ? ? ? ? ?}
// ? ? ? ? ? ? ? }
? ? ? ? ?cout<<"Case #"<<NN-N<<":"<<endl;
? ? ? ? ?cout<<dp[0][n-1]<<endl;
? ? }


}

總結(jié)

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

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