dp經典問題,石子合併
描述:
在乙個圓形操場的四周擺放著n 堆石子。現要將石子有次序地合併成一堆。
規定每次只能選相鄰的2 堆石子合併成新的一堆,並將新的一堆石子數記為該次合併的得分。
試設計乙個演算法,計算出將n堆石子合併成一堆的最小得分和最大得分。
/*石子合併問題
由於石子是未成一圈,所以首先我們要把圓圈剪斷變成一條直線,而這樣的直線有n條(每個石子都可以作為直線的開頭)
接下來我們就考慮直線的石子合併問題,這個其實就是矩陣鏈乘法
dp[i][j]=min cost為本次合併帶來的代價,cost=ai+ai+1+ai+2……aj
*/#include
#include
#define n 110
#define inf 0x3f3f3f3f
#define max(a,b) a>b?a:b
#define min(a,b) aint dp[n][n][2]; //
[0]最小值,[1]最大值
intn,a[n],max,min;
int cost(int i ,int
j)void
solve()
}min=min(min,dp[1][n][0
]); max=max(max,dp[1][n][1
]);}
intmain()
printf(
"%d\n%d\n
",min,max);
}return0;
}
scau 9209 石子合併問題
dp經典問題,石子合併 描述 在乙個圓形操場的四周擺放著n 堆石子。現要將石子有次序地合併成一堆。規定每次只能選相鄰的2 堆石子合併成新的一堆,並將新的一堆石子數記為該次合併的得分。試設計乙個演算法,計算出將n堆石子合併成一堆的最小得分和最大得分。石子合併問題 由於石子是未成一圈,所以首先我們要把圓...
3 3 石子合併問題
問題描述 在乙個圓形操場的四周擺放著 n 堆石子。現要將石子有次序地合併成一堆。規定每次只 能選相鄰的 2 堆石子合併成新的一堆,並將新的一堆石子數記為該次合併的得分。試設計一 個演算法,計算出將 n 堆石子合併成一堆的最小得分和最大得分。程式設計任務 對於給定 n 堆石子,程式設計計算合併成一堆的...
282 石子合併
設有n堆石子排成一排,其編號為1,2,3,n。每堆石子有一定的質量,可以用乙個整數來描述,現在要將這n堆石子合併成為一堆。每次只能合併相鄰的兩堆,合併的代價為這兩堆石子的質量之和,合併後與這兩堆石子相鄰的石子將和新堆相鄰,合併時由於選擇的順序不同,合併的總代價也不相同。例如有4堆石子分別為 1 3 ...