【資料儲存】
遞推:
1.每行為乙個階段
2.f(i,j)表示第i行第j列商店到起點最大和
3.狀態轉移方程:
·逆推:為f(i,j)=max
……memset(visited,0,sizeof(visited));
cout<
執行較慢
記錄路徑
g[n][n]記錄每一步的選擇
int a[n][n],f[n][n],g[n][n];
void printpath(int i,int j)
滾動陣列
儘管f有n行,但只有兩行參與了計算。所以可以吧f變成f[1][n]來節省空間。
計算的時候,讓i和i-1對2取模
f[i%2][j] = max(f[(i-1)%2][j], f[(i-1)%2][j-1]) + a[i][j];
或者可以這樣寫
#define f(i,j) f[(i)%2][j] // 注意括號
……f(i,j) = max(f(i-1,j), f(i-1,j-1)) + a[i][j];
騙分方法
①暴力搜尋
int result=0;
void search(int x,int y,int depth,int
sum)
else
} //呼叫try(1,1,1,a[1][1])
②貪心+搜尋
對於某些求最小值的問題,可以先用貪心演算法得到較優解。然後開始搜尋,搜尋時只要搜到的比最小值大就剪枝。搜尋到頂點時更新最小值。
求最大值不能用
③隨機化
從最頂層開始,讓向左走和向右走的概率相等。這個過程重複若干次,總有可能的得到正確答案。
int result=0;
srand(time(null));
for(int t=1;t<=10000;t++)
rand()/(double)rand_max;
if(p<0.5) x+=0;
else x+=1;
v+=a[i][x];
}if(v>result) result=v;
}
【問題描述】n 堆石子圍成一圈,每堆石子的量a[i]已知。每次可以將相鄰兩堆合併為一堆,將合併後石子的總量記為這次合併的得分。n-1 次合併後石子成為一堆。求這n-1 次合併的得分之和可能的最大值和最小值。(n≤100,1≤i≤n)
(1)環的處理方法
以某一點作為起點,按順時針或逆時針的順序把環上的元素複製兩遍。處理時注意起點範圍(0~n-1)和最大長度(n)。
例如上面的示例,可以變成:5 9 4 4 5 9 4 4,這樣就包含了分別以5、9、4、4 為起點的4 個環。
(2)求解
遞推思路:計算將第i堆至第j堆完全合併所能獲得的最大得分。這是此題的關鍵。
劃分階段:以合併的次數作為標準劃分階段。
確定狀態:f1(i,j)表示第i 堆至第j 堆合併所能獲得的最大價值,f2(i,j)表示第i 堆至第j 堆合併所能獲得的最小價值。
狀態轉移方程: f1(i,j)=max
f2(i,j)=min
其中1≤i≤k
國慶節 放假
終於到國慶節了.終於放假了,好慘.徒勞的辛苦了好幾個月了.本來想好好休息一下,但是明天就要去廣州姑姑家,然後呆兩天就回家.也好忙哦.煩 前段時間就一直在開發研究所的專案,周五他們過來驗收.本來按照開始的需求分析已經是完全做好了,但是他們突然就提出了好多新的要求而且都很合理.明顯是做需求的時候溝通出了...
我們的國慶節
又逢國慶,道一聲 國慶快樂 這是大四的我們在學校過得最後乙個國慶。這個國慶我們同往日一樣,繼續學習。繼續在提高班享受我們的快樂。雖然也想回家,看望親人。替家人分擔一些近憂,但七期 八期的每個人心裡都可以做出正確的判斷。國慶前,回家呆了一天。第二天上午就匆匆的趕了回來。你問我累嗎?我說不累,見到家裡一...
國慶節遊嵩山
國慶節的時候,和同學一起去鄭州爬了一趟嵩山。之前因為參加親戚婚禮,所以穿的是皮鞋。在沒有經驗的情況下,硬是沒坐纜車登了上去,又在上上走了好幾個小時,結果腳部磨的不行了 不過風景確實不錯,寫部落格記錄一下。少林寺就在少室山腳下,規模還是很大的,但是在國慶這個小長假期間只能用人山人海來形容,也沒太仔細逛...