zoj 1196 Fast Food 动态规划
2011-03-30 19:20
543 查看
//dp[i][k]表示前i个店添加k个供应点所达到的最小值 //状态转移方程为:dp[i][k] = min(dp[j][k-1], dis[j+1][i]), //其中k-1 <= j <= i-1, dis[i][j]表示从第i个饭店到第j个饭店添加一个供应点所达到的最小值,取i,j中间值即可 //初始化:dp[0][0] = 0; #include <iostream> #include <cstring> using namespace std; const int N = 205; const int INF = 1000000000; int dp ; int dis ; int num ; int n, m; int my_abs(int a) { if (a > 0) return a; return -a; } int main() { int cases = 1; while (cin >> n >> m && (n || m)) { for (int i = 1; i <= n; i++) cin >> num[i]; memset(dis, 0, sizeof(dis)); for (int i = 1; i <= n; i++) { for (int j = i; j <= n; j++) { int mid = (i+j)/2; for (int k = i; k <= j; k++) dis[i][j] += my_abs(num[mid] - num[k]); } } for (int i = 0; i <= n; i++) for (int j = 0; j <= n; j++) dp[i][j] = INF; dp[0][0] = 0; for (int i = 1; i <= n; i++) for (int k = 1; k <= m; k++) for (int j = k-1; j < i; j++) dp[i][k] = min(dp[j][k-1] + dis[j+1][i], dp[i][k]); cout << "Chain " << cases++ << endl; cout << "Total distance sum = " << dp [m] << endl; cout << endl; } return 0; }
相关文章推荐
- zoj 1196 Fast Food 变种区间dp
- zoj 1196 Fast Food
- HDU_1227_Fast Food_动态规划
- hdu 1227 fast food 动态规划
- 【长理友谊赛B Fast Food】【动态规划】
- HOJ-1005 Fast Food(动态规划)
- HOJ-1005 Fast Food(动态规划)
- ZOJ 3469 Food Delivery -- 区间dp
- Work at a KFC fast food restaurant
- 小白dp uva 662 - Fast Food (除夕夜的博客 ^ ^)
- [ACM_动态规划] ZOJ 1425 Crossed Matchings(交叉最大匹配 动态规划)
- hdu 1227 Fast Food(dp)
- zoj 2604 Little Brackets(动态规划+递推+java)
- FOJ Program1005 Fast Food
- [ZOJ 3352] Boring Board Game [动态规划]
- HDU 1227 Fast Food DP
- hdu1227 Fast Food 【DP】
- [ACM] HDU 1227 Fast Food (经典Dp)
- (HDU1227)Fast Food(DP)
- HDU 1227 Fast Food (DP)