题目:
http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=36406
题目举的那个例子有些错误。。一看就能发现并且修正的:)
这道题算是最简单的区间DP问题之一了吧~以至于我很顺畅地就写出了转移方程,算是这几天训练区间DP的结果吧:)
#include <cstdio> #include <iostream> #define INF 0x3f3f3f3f using namespace std; int dp[505][505]; int main () { int t, n, K, kase=1; scanf("%d", &t); while(t--) { scanf("%d%d", &n, &K); for(int step=1; step<n; step++) { for(int i=1; i+step<=n; i++) { int j = i+step; dp[i][j] = INF; for(int k=i; k<=j; k++) { dp[i][j] = min(dp[i][j], dp[i][k-1]+dp[k+1][j]+(k+K)*(j-i+1)); } } } printf("Case %d: %d\n", kase++, dp[1][n]); } return 0; }