題意:將n堆石子合併成一堆,每次只能合併相鄰的兩堆石子,每次合併的代價是兩堆石子總石子數和;
思路:入門的一道區間dp,將合併區間由小向大推;
dp[i][j]表示合併區間[i, j]的最小代價;初始化dp為inf,dp[i][i]=0;
dp[i][j]=min(dp[i][k]+dp[k+1][j]]+sum[i][j])(i<=k#include #include #include #include #define inf 0x3f3f3f3f
using namespace std;
int a[110], dp[110][110], sum[110][110];
int main()
for(int i=1; i<=n; i++)
} for(int len=2; len<=n; len++)
}} printf("%d\n", dp[1][n]);
} return 0;
}
CSU 1592 石子歸併 區間dp
現在有n堆石子,第i堆有ai個石子。現在要把這些石子合併成一堆,每次只能合併相鄰兩個,每次合併的代價是兩堆石子的總石子數。求合併所有石子的最小代價。第一行包含乙個整數t t 50 表示資料組數。每組資料第一行包含乙個整數n 2 n 100 表示石子的堆數。第二行包含n個正整數ai ai 100 表示...
動態規劃 CSU 1592 石子歸併
題目 現在有n堆石子,第i堆有ai個石子。現在要把這些石子合併成一堆,每次只能合併相鄰兩個,每次合併的代價是兩堆石子的總石子數。求合併所有石子的最小代價。第一行包含乙個整數t t 50 表示資料組數。每組資料第一行包含乙個整數n 2 n 100 表示石子的堆數。第二行包含n個正整數ai ai 100...
CSU 1592 石子歸併 相鄰操作Dp問題
剛開始,想到的是貪心,每次合併相鄰和值最小的兩堆就行了,這題和poj 3186 treats for the cows以及紫書上的 最優矩陣鏈乘 差不多,初看看似貪心,實則是dp問題,但是都不會,呵呵。只能看別人的 然後再寫。思路 用dp i j 表示合併區間 i,j 所需要的最小代價,那麼,狀態轉...