动态规划解决钢条切割问题

来源:互联网 发布:腾讯数据nba 编辑:程序博客网 时间:2024/05/17 07:39
#include<cstdio>#define MAXN 1010#define INF 999999999int p[MAXN], r[MAXN], s[MAXN];//p[i]---长度为i的价格;r[i]---长度为i的最大收益;s[i]---长度为i的最大收益方案中,第一段切下的长度;int solve(int n){    if(n == 0)        return 0;    r[0] = 0;    int q;    for(int i = 1; i <= n; i++)//规模从1-n增加    {        q = -INF;        for(int j = 1; j <= i; j++)//对规模为i的情况进行各种情况的尝试        {            if(q < p[j]+r[i-j])            {                q = p[j] + r[i-j];                s[i] = j;            }        }        r[i] = q;    }    return r[n];}void print(int n){    while(n > 0)    {        printf("%d ", s[n]);        n -= s[n];    }}int main(){    int n;    while(~scanf("%d", &n))//读入钢条的长度;    {        for(int i = 1; i <= n; i++)            scanf("%d", &p[i]);//读入价格表;        int res = solve(n);        printf("%d\n", res);//输出最大收益;        print(n);//输出最优切割方案;    }}

0 0
原创粉丝点击