UVA10003 - Cutting Sticks

来源:互联网 发布:ug8.5编程加工实战视频 编辑:程序博客网 时间:2024/05/20 11:25

用dp(i, j)表示木棍在i切割点和j切割点之间的最小费用
状态转移方程:dp(i, j) = min(dp(i, j), dp(i, h) + dp(j, h) + num[j] - num[i]);

#include <iostream>#include <algorithm>#include <cstdio>#include <cstring>using namespace std;#define INF 1 << 30int dp[55][55];int num[55], n;int main(){   // freopen("in.txt", "r", stdin);    int l;    while(cin >> l && l)    {        cin >> n;        for(int i = 1; i <= n; i++)            scanf("%d", num+i);        num[0] = 0;        num[n+1] = l;       for(int i = 2; i <= n+1; i++)        for(int j = 0; j + i <= n+1; j++)       {           dp[j][i+j] = INF;           for(int h = j+1; h < j+i; h++)           {              dp[j][i+j] = min(dp[j][i+j], dp[j][h] + dp[h][i+j] + num[i+j] - num[j]);           }       }        printf("The minimum cutting is %d.\n", dp[0][n+1]);    }    return 0;}
0 0
原创粉丝点击