台灣最大程式設計社群網站
線上人數
484
 
會員總數:245021
討論主題:188965
歡迎您免費加入會員
討論區列表 >> C/C++ >> 方陣問題
[]  
[我要回覆]
1
回應主題 加入我的關注話題 檢舉此篇討論 將提問者加入個人黑名單
方陣問題
價值 : 20 QP  點閱數:2546 回應數:4

樓主

阿魚
初學者
203 12
712 50
發送站內信

捐贈 VP 給 t313036
有一n*n(3<=n<=10)的方陣,每格裡皆有數字,請寫一程式計算,若只能往右或往下走,從左上角走到右下角,走過的數字加起來,能得到得最大值為多少?

輸入資料第一個數為n,接著有n平方個數表示每格裡數字 輸出最大值

INPUT EX

3
1 3 2
5 5 4
3 0 8

OUTPUT EX
23

搜尋相關Tags的文章: [ 方陣問題 ] ,
本篇文章發表於2005-03-10 19:46
別忘捐VP感謝幫助你的人 新手會員瞧一瞧
1樓
回應

cute
捐贈 VP 給 Sean 檢舉此回應
我用c# 寫的  應該是有用啦

int [,] n = new int [3, 3];
n[0, 0] = 1;
n[0, 1] = 3;
n[0, 2] = 2;
n[1, 0] = 5;
n[1, 1] = 5;
n[1, 2] = 4;
n[2, 0] = 3;
n[2, 1] = 0;
n[2, 2] = 8;

int x = 0;
int y = 0;
int sum = n[0, 0];
while (x < 2 && y < 2)
{
   if (x < 2 && y < 2)
   {
      if (n[x + 1, y] > n[x, y + 1])
         sum += n[++x, y];
      else
         sum += n[x, ++y];
   } 
   else if (x < 2)
      sum += n[++x, y];
   else if (y < 2)
      sum += n[x, ++y];
}
sum += n[2, 2];
return sum;

本篇文章回覆於2005-03-10 23:33
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
2樓
回應

小白
捐贈 VP 給 Marcus 檢舉此回應
這是很簡單的一題動態規劃題啦 = =

原理是
b[i,j] = b[i,j] + Max(b[i-1,j],b[i,j-1])

我在我的程式先作了一次 initialization ,以縮短 coding 長度。
#include <iostream>
using namespace std;
inline long max(long a,long b){
   return a>b?a:b;
}
int main(){
   long n,i,j;
   cin >> n;
   long b[n+2][n+2];
   for(i=0;i<n+2;++i)
      for(j=0;j<n+2;++j)
         b[i][j]=0;
   for(i=1;i<=n;++i)
      for(j=1;j<=n;++j)
         cin >> b[i][j];
   for(i=1;i<=n;++i)
      for(j=1;j<=n;++j)
         b[i][j]+=max(b[i-1][j],b[i][j-1]);
   cout << b[n][n] << endl;
}


   
           
本篇文章回覆於2005-03-11 00:32
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
3樓
作者回應

阿魚
捐贈 VP 給 t313036 檢舉此回應
謝謝,不過,"long b[n+2][n+2];",C++語言可以動態配置陣列嗎?
本篇文章回覆於2005-03-11 21:44
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
4樓
回應

小白
捐贈 VP 給 Marcus 檢舉此回應
可以!這也是 C++ 的優點之一。
但如果是純正的 C 語言將不允許這個方法。
本篇文章回覆於2005-03-12 00:13
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
   
1

回覆
如要回應,請先登入.