演算法提高 矩陣乘法
時間限制:3.0s 記憶體限制:256.0mb
問題描述
有n個矩陣,大小分別為a0*a1, a1*a2, a2*a3, ..., a[n-1]*a[n],現要將它們依次相乘,只能使用結合率,求最少需要多少次運算。
兩個大小分別為p*q和q*r的矩陣相乘時的運算次數計為p*q*r。
輸入格式
輸入的第一行包含乙個整數n,表示矩陣的個數。
第二行包含n+1個數,表示給定的矩陣。
輸出格式
輸出乙個整數,表示最少的運算次數。
樣例輸入 3
1 10 5 20
樣例輸出
150資料規模和約定
1<=n<=1000, 1<=ai<=10000。
之前一直是執行錯誤,原來是陣列開大了,多看了乙個0,實在是不應該,也提醒自己國賽要細心審題。
這道題可以說是我自己想出來的吧,核心思想是我自己想出來的,有幾處bug是參照的別人的**找出來的,
包括memset怎麼初始化無窮大,這就涉及16進製制了,還有就是我的inf不夠大,導致出現錯誤。
這個區間dp的**我寫的很快,但就是不對,我是怎麼找都找不到,實在沒轍了我想我拿個例子模擬一下看**出錯了。然後真的就讓我給找出來了。我之前的問題**是這樣的:
for(i=1;i
dp[1][1]+dp[2][4],請問,dp[2][4]在這之前計算出來了嗎?顯然沒有,所以說這不就錯了嘛!我為什麼會寫錯!?因為我並沒有理解什麼叫做子問題,我們在求遞推式時,等式右邊的dp陣列必須得是已經計算好了的,要不然就不對。
#includeusing namespace std;
const long long inf = 100000000000000000ll;
struct matrix
;matrix m[1004];
int n;
long long dp[1004][1004];
int main()
for(i=0;i<1004;i++)
for(j=0;j<1004;j++)
dp[i][j]=inf;
for(i=1;i
對MapReduce Yarn的深刻理解
1.mapreduce詳細工作流程之map階段 2.mapreduce流程之reduce階段巨集觀上看 reducetask分為四個階段 1.copy 2.merge 3.sort 4.reduce 1.copy reducetask將遠端從maptask上覆制過來要處理的資料,針對某一片資料,如果...
深刻理解結構體的記憶體對齊問題
1 為什麼要對結構體內存對齊?了解計算機的人都知道,cpu是沒有辦法來儲存資料的,cpu只有計算能力。所以,儲存資料的任務就交給了記憶體。那麼,當cpu需要計算的時候,就需要從記憶體上獲取資料,記憶體上資料和位址是對應的,cpu只要知道對應資料的位址,就可以呼叫資料了。知道了cpu必須定址之後,我們...
深刻理解Vue中的元件
今天看了下vue官網上關於元件的教程,感覺內容還挺多,現在把元件中基本的知識梳理一下。註冊元件就是利用vue.component 方法,先傳入乙個自定義元件的名字,然後傳入這個元件的配置。vue.component mycomponent 如上方式,就已經建立了乙個自定義元件,然後就可以在vue例項...