日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

NYOJ 737---石子归并(GarsiaWachs算法)

發(fā)布時間:2024/10/12 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 NYOJ 737---石子归并(GarsiaWachs算法) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

原題鏈接

描述????有N堆石子排成一排,每堆石子有一定的數(shù)量?,F(xiàn)要將N堆石子并成為一堆。合并的過程只能每次將相鄰的兩堆石子堆成一堆,每次合并花費的代價為這兩堆石子的和,經(jīng)過N-1次合并后成為一堆。求出總的代價最小值。

輸入
有多組測試數(shù)據(jù),輸入到文件結(jié)束。
每組測試數(shù)據(jù)第一行有一個整數(shù)n,表示有n堆石子。
接下來的一行有n(0< n <200)個數(shù),分別表示這n堆石子的數(shù)目,用空格隔開
輸出
輸出總代價的最小值,占單獨的一行
樣例輸入
3 1 2 3 7 13 7 8 16 21 4 18
樣例輸出
9 239

對于石子合并問題,有一個最好的算法,那就是GarsiaWachs算法。時間復(fù)雜度為O(n^2)。

它的步驟如下:

設(shè)序列是stone[],從左往右,找一個滿足stone[k-1] <=?stone[k+1]的k,找到后合并stone[k]和stone[k-1],再從當(dāng)前位置開始向左找最大的j,使其滿足stone[j] >?stone[k]+stone[k-1],插到j(luò)的后面就行。一直重復(fù),直到只剩下一堆石子就可以了。在這個過程中,可以假設(shè)stone[-1]和stone[n]是正無窮的。

?

舉個例子: 186 64 35 32 103 因為35<103,所以最小的k是3,我們先把35和32刪除,得到他們的和67,并向前尋找一個第一個超過67的數(shù),把67插入到他后面,得到:186 67 64 103,現(xiàn)在由5個數(shù)變?yōu)?個數(shù)了,繼續(xù):186 131 103,現(xiàn)在k=2(別忘了,設(shè)A[-1]和A[n]等于正無窮大)234 186,最后得到420。最后的答案呢?就是各次合并的重量之和,即420+234+131+67=852。 ? 基本思想是通過樹的最優(yōu)性得到一個節(jié)點間深度的約束,之后證明操作一次之后的解可以和原來的解一一對應(yīng),并保證節(jié)點移動之后他所在的深度不會改變。具體實現(xiàn)這個算法需要一點技巧,精髓在于不??焖賹ふ易钚〉膋,即維護(hù)一個“2-遞減序列”樸素的實現(xiàn)的時間復(fù)雜度是O(n*n),但可以用一個平衡樹來優(yōu)化,使得最終復(fù)雜度為O(nlogn)。

代碼如下:

#include <iostream> #include <string.h> #include <stdio.h> using namespace std; const int N = 50005; int stone[N]; int n,t,ans; void combine(int k) { int tmp = stone[k] + stone[k-1]; ans += tmp; for(int i=k;i<t-1;i++) stone[i] = stone[i+1]; t--; int j = 0; for(j=k-1;j>0 && stone[j-1] < tmp;j--) stone[j] = stone[j-1]; stone[j] = tmp; while(j >= 2 && stone[j] >= stone[j-2]) { int d = t - j; combine(j-1); j = t - d; } } int main() { while(scanf("%d",&n)!=EOF) { if(n == 0) break; for(int i=0;i<n;i++) scanf("%d",stone+i); t = 1; ans = 0; for(int i=1;i<n;i++) { stone[t++] = stone[i]; while(t >= 3 && stone[t-3] <= stone[t-1]) combine(t-2); } while(t > 1) combine(t-1); printf("%d\n",ans); } return 0; }

?

轉(zhuǎn)載于:https://www.cnblogs.com/chen9510/p/5781884.html

總結(jié)

以上是生活随笔為你收集整理的NYOJ 737---石子归并(GarsiaWachs算法)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 久久综合久久久 | a毛片基地 | 欧美丰满美乳xxⅹ高潮www | 九九热re | 91黑丝美女| 日韩欧美一级大片 | 女教师高潮黄又色视频 | 日韩毛片免费看 | 国产探花一区 | 老熟女高潮喷水了 | 国产最新av | 久久精品专区 | 男男免费视频 | 无码国产精品96久久久久 | 国模小丫大尺度啪啪人体 | 91精品国产高清 | 久久成人乱码欧美精品一区二区 | 亚洲国产精品无码久久 | 国产成人精品一区二 | 成人免费不卡视频 | 麻豆蜜桃视频 | 久久永久免费 | 精品乱码一区内射人妻无码 | 少妇又紧又爽视频 | 亚洲乱码在线 | 一本色道久久综合亚洲精品按摩 | www黄色网址 | 日韩在线资源 | 日韩精品片 | jizzjizz免费| 欧美不卡三区 | 亚洲最大成人网站 | 国产欧美另类 | 久久人人爽人人爽人人片av高清 | 成人作爱视频 | 两口子交换真实刺激高潮 | 在线欧美日韩国产 | 国产精品国产三级国产Av车上的 | www.国产在线视频 | 国产91精品欧美 | 天天操天天插天天射 | 亚洲最大黄色网址 | 美女视频久久久 | 日韩在线一 | 精品电影一区二区 | 中国少妇乱子伦视频播放 | 色爽黄 | 99ri国产精品| 在线观看av的网站 | 成年人黄色录像 | 午夜播放| 国产97色| 蜜桃视频一区二区在线观看 | 中国黄色三级 | 色综合综合网 | 国产精品偷伦视频免费观看了 | caoporn视频在线观看 | 中文字幕在线看片 | 日批在线播放 | 国产精品一区二区免费 | 欧美丰满老妇 | 日本japanese乳偷乱熟 | 粉嫩一区二区三区 | 日韩av在线免费播放 | 精品妇女一区二区三区 | 国产r级在线观看 | 久久午夜夜伦鲁鲁一区二区 | 国产在线高潮 | 久久亚洲aⅴ无码精品 | 亚洲一级网 | 波多野结衣一二三四区 | 一区二区三区欧美在线 | 亚洲国产福利视频 | 午夜在线国产 | 台湾佬久久 | 亚洲美女自拍偷拍 | 亚洲三页 | 99精品人妻无码专区在线视频区 | 91秘密入口 | 日本在线精品视频 | 国产亚洲性欧美日韩在线观看软件 | 国内自拍xxxx18| 91精品免费在线观看 | 国产精品高清在线观看 | 中文字幕精品一区久久久久 | 春色伊人| 法国经典free性复古xxxx | 三点尽露的大尺度国产 | 亚洲精品在线视频免费观看 | 97视频免费在线观看 | 欧美激情另类 | 蜜乳av中文字幕 | 毛片网在线| 激情久久久久久久 | 青青草免费观看 | 欧美中文字幕一区二区三区 | 桃色成人网 | 国产依人| 亚洲综合久久婷婷 |