freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

c常用經(jīng)典算法及其實(shí)現(xiàn)(參考版)

2025-06-28 06:22本頁(yè)面
  

【正文】 (若a[i]≠b[j]) max{f[i1][j],f[i][j1]}+1 狀態(tài)轉(zhuǎn)移方程:二十七、最長(zhǎng)公共子序列問(wèn)題狀態(tài)轉(zhuǎn)移方程:f[i]=max{f[j]}+1 (1≤j≤i1,1≤i≤n,a[i]≥a[j])臨界狀態(tài):f[1]=1。f[i]表示從第1個(gè)數(shù)開(kāi)始,以第i個(gè)數(shù)結(jié)尾的最長(zhǎng)遞增子序列。二十五、多背包問(wèn)題//選第i個(gè)物品}coutf[n][v]endl。k=v/w[i]。//k=0的情況作為f[i][j]的初始值,然后在k=1,2,…,v/w[i]中找最大值j)j++)//枚舉狀態(tài),當(dāng)然此處也可寫(xiě)成:for(int j=v。for(int j=0。i=n。邊界條件為f[0][s]=0,s=0,1,…,v。f[i][j]表示前i個(gè)物品,在背包載重為j時(shí)獲得的最大價(jià)值。狀態(tài)轉(zhuǎn)移方程f[i][j]=max{f[i1][j],f[i1][jw[i]]+c[i],f[i1][j2*w[i]]+2*c[i],…,f[i1][jk*w[i]]+k*c[i]}。j=w[i]。對(duì)比優(yōu)化前后,我們不難發(fā)現(xiàn),優(yōu)化后的代碼實(shí)際上就是在原來(lái)基本的代碼基礎(chǔ)上,減少了階段這一維,同時(shí)在枚舉狀態(tài)時(shí),為了保證結(jié)果的正確性,枚舉的順序只能是v到0,而不能是0到v。//輸出結(jié)果。(f[j]f[jw[i]]+c[i])) f[j]=f[jw[i]]+c[i]。 if((jw[i])amp。 {f[j]=f[j]。j)j)//枚舉狀態(tài),當(dāng)然此處也可寫(xiě)成:for(int j=v。for(int j=v。i=n。優(yōu)化:用一維數(shù)組實(shí)現(xiàn),把第i1階段和第i階段數(shù)據(jù)存在一塊。//輸出結(jié)果。//不選第i個(gè)物品if(f[i][j]f[i1][jw[i]]+c[i]) f[i][j]=f[i1][jw[i]]+c[i]。j=0。j=v。i++)//枚舉階段for(int i=1。顯然f[n][v]即為所求。有狀態(tài)轉(zhuǎn)移方程f[i][j]=max{f[i1][j],f[i1][jw[i]]+c[i]}。//這是決策,加和不加中間點(diǎn),取最小的值}j++)i++) //i,j是結(jié)點(diǎn)i到結(jié)點(diǎn)J,相當(dāng)于DP中的狀態(tài)for(int j=1。for(int i=1。 k=n。二十一、Floyed算法void floyed(void)// a[i][j]表示結(jié)點(diǎn)i到結(jié)點(diǎn)j的最短路徑長(zhǎng)度,初始時(shí)值為I,J的權(quán)值。對(duì)于島國(guó)問(wèn)題,我們就要選擇此算法,如果用Prim算法,還要開(kāi)一個(gè)二維的數(shù)組來(lái)表示圖的鄰接矩陣,對(duì)于10000個(gè)點(diǎn)的數(shù)據(jù),顯然在空間上是無(wú)法容忍的。 }coutansendl。 if(sumn1)coutImpossibleendl。//已經(jīng)確定了n1條邊了,最小生成樹(shù)已經(jīng)生成了,可以提前退出循環(huán)了}}//不在同一個(gè)集合,合并,即第i條邊可以選取。merge(x1,x2)。//取第i條邊的起點(diǎn)所在的樹(shù)的根int x2=getfather(elist[i].to)。i=t。qsort(1,t)。}void merge(int x,int y)//合并x,y結(jié)點(diǎn),在此題中的x,y為兩個(gè)根結(jié)點(diǎn)。 else {{if(x==father[x]) return x。} }r。elist[r]=tmp。 {edge tmp=elist[h]。 while(elist[r].wm) r。while(hr)二十、Kruscal算法void qsort(int x,int y)//對(duì)邊集數(shù)組進(jìn)行快速排序{int h=x,r=y,m=elist[(h+r)1].w。}{amp。 //用當(dāng)前找的結(jié)點(diǎn)更新未求結(jié)點(diǎn)到X的最短路徑j(luò)++)for(int j=1。 //思考:如果k=X說(shuō)明什么?說(shuō)明后面的點(diǎn),無(wú)解。 }mdis[j]){m=dis[j]。if(vis[j]==0amp。j=n。 //虛擬一個(gè)最大的數(shù)big=99999999。 //對(duì)于n個(gè)結(jié)點(diǎn)的圖,要求x到其它n1個(gè)結(jié)點(diǎn)的最短距離i++)}for(int i=1。 if(i!=x){dis[i]=g[x][i]。 //對(duì)其它各點(diǎn)初始化。i++)for(int i=1。pre[x]=0。 //求結(jié)點(diǎn)x到各個(gè)結(jié)點(diǎn)的最短路徑{memset(vis,0,sizeof(vis))。語(yǔ)句,即在更新權(quán)值時(shí),還應(yīng)該更新起點(diǎn)。} i=n1。 {if(elist[j].wa[elist[i].to][elist[j].to]) elist[j].w=a[elist[i].to][elist[j].to]。j=n1。elist[m]=tmp。 if(m!=i) //如果最小的邊不是第i條邊就交換{edge tmp=elist[i]。j=n1。 {int m=i。i=n1。 }elist[i].to=i+1。i=n1。edge為結(jié)構(gòu)體類(lèi)型。} if(x1!=x2) father[x1]=x2。 x2=getfather(y)。 x1=getfather(x)。{int x1,x2。}} father[x]=temp。} }//暫存X沒(méi)有修改前的父結(jié)點(diǎn)father[x]=p。int getfather(int x)//非遞歸求X結(jié)點(diǎn)的根結(jié)點(diǎn)編號(hào)同時(shí)進(jìn)行路徑壓縮{int p=x。}//遞歸生成右子樹(shù)}十七、并查集int getfather(int x)//非遞歸求X結(jié)點(diǎn)的根結(jié)點(diǎn)的編號(hào){while(x!=father[x]):39。amp。//遞歸生成左子樹(shù) a[x].code=a[a[x].father].code+39。 a[x].code=a[a[x].father].code+39。}//根結(jié)點(diǎn) }void inorder(int x)//遞歸生成哈夫曼編碼{ (a[s].father==0)) //a[s].father=0,說(shuō)明這個(gè)結(jié)點(diǎn)還不是別個(gè)結(jié)點(diǎn)mins=s。 if((a[mins].daa[s].da)amp。s=k。 { }}int fmin(int k)//在1到K中尋找最小的權(quán)值的編號(hào) //合并l,j結(jié)點(diǎn),生成新結(jié)點(diǎn)i a[r].father=
點(diǎn)擊復(fù)制文檔內(nèi)容
試題試卷相關(guān)推薦
文庫(kù)吧 www.dybbs8.com
備案圖鄂ICP備17016276號(hào)-1