滾動陣列中本次0/1用完後,對後面結果無貢獻了,一定要記得清零,否則會不斷累積(一共就兩個數0/1,迴圈多了肯定都快填滿了)
那道題是這樣的:(步步為零)
你是否聽說過這個遊戲?遊戲者在一張特殊的**中按照規則跳動,使得跳到的數字經過加號和減號的連線,盡可能的逼近零。**通常是如圖 1.1所示的形狀,大小由中間一行的方格數 n 決定(圖 1.1 就是乙個 n=4的例子)。
遊戲者通常是從最下面的方格出發,按照如圖 1.2所示的規則在**中跳動,當遊戲者跳到最頂端的方格時,遊戲結束。在遊戲未結束前,遊戲者不允許跳到**外。將遊戲者跳到的 2∗n−1個數字依次寫下來,在每兩個相鄰的數字中間加上加號或減號,使得計算結果最接近零。例如對於圖 1.1所示的**,最好的跳動及計算方案是:\(7+8+(−5)+(−2)−5−1−2=0 或 7+10+(−7)−6+(−3)−3+2=0 或 7+10+(−5)−10−5+1+2=0 或 7+10+(−5)+(−2)−5−3−2=0。\)
輸入檔案的第一行是 \(n(n<=50)\),接下來 \(2∗n−1\) 行給出了**中每行的每個方格中的數字,第 \(i+1\) 行的第 \(j\) 個數字對應於**中第 \(i\) 行的第 \(j\) 個數字。檔案中第二行的數字表示的是**頂端的方格中的數字。檔案中所有的數字都是整數,同一行相鄰的兩個數字間用空格符隔開。
輸出檔案只有一行,是你所求出的最接近零的計算結果的絕對值。42
3 1-3 5 7
6 10 -2 20
-7 -5 -8
10 8
7**中的所有數字大於等於−50,小於等於50。
(本部落格主要強調細節,好吧寫完部落格之後我覺得上句話並不恰當)
\(f[i][j][k]= 0 或 1\),\(f[i][j][k]= = 0\)表示最後乙個數一直加到\(a[i][j]\)(還沒加\(a[i][j]\))不能達到k,\(f[i][j][k] = = 1\)表示可以達到 \(k\)
我們不處理負數,所以對於\(k\),我們算出乙個最大區間\([-mid,mid]\),然後每次求出來的和都向上平移mid以保證正數。
轉移:(我們是從下向上轉移/遞推)
#include #include using namespace std;
int max,mid,n,st,a[52][52],f[2][52][10000];
int a(int x)
int main()
mid+=max;
} for(int i=1;imax?a[n+i][j]:max;
} mid+=max;
} int next;
f[st][1][mid]=1;
for(int i=n*2-1;i>=n;--i,st^=1)
}} }
for(int i=n-1;i>=1;--i,st^=1)
}} }
int ans=0x3f3f3f3f;
for(int i=0;i<=(mid<<1);++i)
printf("%d\n",ans);
return 0;
}
UGUI LayoutGroup填坑細節
child force expand的用法 在無layout element的時候,如果勾選了child force expand,會強制將子元素等比分配父元素的區域,但是子元素不會擴充套件 擴大 2.在有layour element的時候,如果勾選了child force expand,會強制將子...
hadoop 細節考察點
1.在hadoop 上執行乙個job,主要就是mr,而mr的優化就是主要的關鍵。從六個方面考慮 資料輸入 map階段 reduce階段 io傳輸 資料傾斜問題和常用的調優引數 inputformat combinetextinputformat作為輸入,解決大量小檔案場景.map階段 調整 io.s...
滾動陣列詳解
滾動陣列 可以想象成顯示屏,對於有很多的數字來說,每次只顯示有限的數字,用完 顯示完 就向後移動一位,顯示的數量不變,但是在卡記憶體比較緊的題中,可以節省很多空間。最典型的就是斐波那契數列,普通的求解方法不外乎就是用遞推式f i f i 1 f i 2 但是這個如果資料量大的話會爆記憶體,而用滾動陣...