qwb與矩陣
time limit: 2 sec memory limit: 128 mb
submit: 1210 solved: 260
[submit][status][web board]
description
做完了辣麼多的數學題,qwb好好睡了一覺。但是他做了乙個夢:
有乙個n*m的矩陣,qwb在這個矩陣的左上角(1,1),終點在右下角(n,m)。
每個格仔中有小錢錢,也可能沒有,還有可能是要交過路費的,並且行走方向必須是靠近終點的方向。
往下走一次只能走一格,往右走一次可以走一格也可以走到當前列數的倍數格。
比如當前格仔是(x,y),那麼可以移動到(x+1,y),(x,y+1)或者(x,y*k),其中k>1。
qwb希望找到一種走法,使得到達右下角時他能夠有最多的小錢錢。
你能幫助他嗎?
input
第一行是測試例數量 t (t<=100),接下來是t組測試資料。
每組測試資料的第一行是兩個整數n,m,分別表示行數和列數(1<=n<=20,1<=m<=10000);
接下去給你乙個n*m的矩陣,每個格仔裡有乙個數字 k (-100<=k<=100)代表小錢錢的數量。 ∑nm<=3,000,000
output
每組資料一行,輸出l先生能夠獲得小錢錢的最大值(可能為負數)。
sample input
1 3 8
9 10 10 10 10 -10 10 10
10 -11 -1 0 2 11 10 -20
-11 -11 10 11 2 10 -10 -10
sample output
52 hint
這道題,注意兩點
1 .對於倍數的處理
2 對於輸入方式的,注意這道題,輸入量100*20*10000。輸入量很大。其實輸入量在1e5的時候就不小了。
和hdu的一道數塔那題很像, 題目鏈結
看**標程
#include
#include
#include
#include
#include
using
namespace
std;
inline
int read()
while('0'
<=ch&&ch<='9')
return x*f;
} //輸入掛
/************************************/
const
int maxn = 10000+10;
const
double eps = 1e-8;
const
int inf =0x3f3f3f3f;
int mp[30][maxn];
int dp[30][maxn];
int main()
}cout
0;}
我的**,dp的方式不同。本質一樣
#include
#include
#include
#include
#include
using
namespace
std;
inline
int read()
while('0'
<=ch&&ch<='9')
return x*f;
} //輸入掛
第一次覺得輸入方式有時候這麼重要。
2116ms 的是用cin
784ms 的是用輸入掛
1388ms 的是用scanf
qwb與矩陣 簡單dp
做完了辣麼多的數學題,qwb好好睡了一覺。但是他做了乙個夢 有乙個n m的矩陣,qwb在這個矩陣的左上角 1,1 終點在右下角 n,m 每個格仔中有小錢錢,也可能沒有,還有可能是要交過路費的,並且行走方向必須是靠近終點的方向。往下走一次只能走一格,往右走一次可以走一格也可以走到當前列數的倍數格。比如...
輸入掛(bzoj 2901 矩陣求和)
很少用輸入掛,以為不超時就好了,但是這題貌似不用過不去啊 只好拿出來用了,當個模板 原理是用getchar 讀入會比用scanf快一些 int read while ch 0 ch 9 x x 10 ch 0 ch getchar return x f time limit 20 sec memor...
2 2 矩陣與向量輸入
函式呼叫的語句格式 冒號表示式與子矩陣提取 variable expression 賦信語句的末尾加乙個分號可以阻止顯示運算結果 保留變數 ans 存放最近一次無賦信變數語句的運算結果 矩陣輸入方法 a l,2,3 4 5,6 7,8 0 其他命令 動態定維 a a 1 2 3 1 2 3 4 ma...