guet-acm-开挂的chair
題目:
“Watch your six!”
最近Chair在玩使命召喚,但是因為菜得特別,所以特別地菜,在敵人的包圍圈中,倒霉的Chair表示每次回頭都會看到一萬個敵人!然后壯烈犧牲,那么問題就來了——現(xiàn)在Chair打開了修改器,要把這群可惡的敵人干掉,那么在包圍圈中Chair應(yīng)當(dāng)如何突圍?
請保證Chair消滅最多敵人并且沖出包圍圈。假設(shè)Chair在左上角,達(dá)到右下角時算突圍成功。
4
1 2 3 4
5 6 9 8
9 1 0 1
2 3 4 5
值得注意的是,Chair是如此英勇,應(yīng)當(dāng)一往無前,也就是說只能向下或向右走。
圖示應(yīng)為最大戰(zhàn)果——于是你應(yīng)該輸出他們的和:35
輸入
第一行,一個N
第二行至N+1行,每行N個數(shù)字,表示這點的敵人人數(shù)
輸出
消滅敵人的總和
輸入范例
4
1 2 3 4
5 6 9 8
9 1 0 1
2 3 4 5
輸出范例
35
代碼如下:
/* 利用動態(tài)規(guī)劃:S[i,j]:到達(dá)i,j的最大戰(zhàn)果 a[i,j]:i,j位置的敵人數(shù) 動態(tài)規(guī)劃轉(zhuǎn)移方程:S[i,j] = max(S[i,j-1], S[i-1,j]) + a[i,j]*/ #include <iostream> #include<algorithm> using namespace std; int main(){int t, N;while( cin >> N){int a[1024] = {0};for(int i=1; i<=N; i++)for(int j=1; j<=N; j++){cin >> t;a[j] = _cpp_max(a[j-1], a[j]) + t;}cout << a[N]<<endl;}return 0; }我剛開始時用遞歸去做的,思想是沒有錯的,就是沒有做出來.
然后想怎么隨機(jī)的向下走和向右走,就用了隨機(jī)函數(shù),這里的思想就錯了
后來還是不懂,就百度求助了.
看了網(wǎng)友的解答才懂.
利用動態(tài)規(guī)劃:
S[i,j]:到達(dá)i,j的最大戰(zhàn)果
a[i,j]:i,j位置的敵人數(shù)
動態(tài)規(guī)劃轉(zhuǎn)移方程:
S[i,j] = max(S[i,j-1], S[i-1,j]) + a[i,j]
這道題的重點就在于如何使用動態(tài)規(guī)劃的思想。
總結(jié)
以上是生活随笔為你收集整理的guet-acm-开挂的chair的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 数字图像处理及matlab实现第三版相关
- 下一篇: 计算机健康小知识,电脑一族护肤保健小常识