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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

NYOJ 737 合并石子(一)

發(fā)布時(shí)間:2025/3/16 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 NYOJ 737 合并石子(一) 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

石子合并(一)

時(shí)間限制:1000?ms ?|? 內(nèi)存限制:65535?KB 難度:3 描述
????有N堆石子排成一排,每堆石子有一定的數(shù)量。現(xiàn)要將N堆石子并成為一堆。合并的過程只能每次將相鄰的兩堆石子堆成一堆,每次合并花費(fèi)的代價(jià)為這兩堆石子的和,經(jīng)過N-1次合并后成為一堆。求出總的代價(jià)最小值。 輸入
有多組測試數(shù)據(jù),輸入到文件結(jié)束。
每組測試數(shù)據(jù)第一行有一個(gè)整數(shù)n,表示有n堆石子。
接下來的一行有n(0< n <200)個(gè)數(shù),分別表示這n堆石子的數(shù)目,用空格隔開
輸出
輸出總代價(jià)的最小值,占單獨(dú)的一行
樣例輸入
3 1 2 3 7 13 7 8 16 21 4 18
樣例輸出
9 239

AC碼:

#include<stdio.h> #include<string.h> #define INF 2000000005 int dp[203][203],sum[203]={0}; int DP(int left,int right) {if(dp[left][right]>=0) // 某一個(gè)區(qū)間左端到右端已經(jīng)得到最優(yōu)方案return dp[left][right];if(left==right) // 說明該區(qū)間就一堆石子{return dp[left][right]=0;}int min,mid;for(mid=left;mid<right;mid++){if(dp[left][right]<0)dp[left][right]=INF;// 核心:動(dòng)態(tài)轉(zhuǎn)移方程min=DP(left,mid)+DP(mid+1,right)+(sum[mid]-sum[left-1])+(sum[right]-sum[mid]);if(min<dp[left][right])dp[left][right]=min;}return dp[left][right]; } int main() {int n,i,a;while(~scanf("%d",&n)){// n表示石子的堆數(shù)for(i=1;i<=n;i++){scanf("%d",&a); // a依次表示第i堆的石子數(shù)sum[i]=a+sum[i-1];}memset(dp,-1,sizeof(dp));printf("%d\n",DP(1,n));}return 0; } 區(qū)間DP問題!
#include<stdio.h> #define INF 2000000005 int dp[205][203],sum[203]; int min(int a,int b) {return a>b?b:a; } int main() {int n,a;while(~scanf("%d",&n)){for(int i=1;i<=n;i++){scanf("%d",&a);sum[i]=sum[i-1]+a;dp[i][i]=0;}// 區(qū)間DPfor(int count=2;count<=n;count++){ // 遍歷合并count=2堆、3堆、...n堆的情況for(int start=1;start<=n-count+1;start++){ // start表示每個(gè)區(qū)間的始點(diǎn)int end=start+count-1; // end表示對(duì)應(yīng)的該區(qū)間的終點(diǎn)dp[start][end]=INF;for(int mid=start;mid<=end;mid++){dp[start][end]=min(dp[start][end],dp[start][mid]+dp[mid+1][end]+sum[end]-sum[start-1]);}}}printf("%d\n",dp[1][n]);}return 0; }

總結(jié)

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

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