zoukankan      html  css  js  c++  java
  • UVA 348 Optimal Array Multiplication Sequence

    UVA_348

        这是个区间动态规划的题目,动态转移方程为f[i][j]=min{f[i][k]+f[k+1][j]+left[i]*right[k]*right[j]}。

    #include<stdio.h>
    #include<string.h>
    #define MAXD 20
    #define INF 1000000000
    int N, left[MAXD], right[MAXD], f[MAXD][MAXD], p[MAXD][MAXD];
    int init()
    {
    int i;
    scanf("%d", &N);
    if(!N)
    return 0;
    for(i = 0; i < N; i ++)
    scanf("%d%d", &left[i], &right[i]);
    }
    void printpath(int a, int b)
    {
    if(a == b)
    {
    printf("A%d", a + 1);
    return ;
    }
    printf("(");
    printpath(a, p[a][b]);
    printf(" x ");
    printpath(p[a][b] + 1, b);
    printf(")");
    }
    void solve()
    {
    int i, j, k, temp;
    for(i = 0; i < N; i ++)
    for(j = i; j < N; j ++)
    {
    if(i == j)
    f[i][j] = 0;
    else
    f[i][j] = INF;
    }
    for(k = 1; k < N; k ++)
    for(i = 0; i + k < N; i ++)
    for(j = i; j < i + k; j ++)
    {
    temp = f[i][j] + f[j + 1][i + k] + left[i] * right[j] * right[i + k];
    if(temp < f[i][i + k])
    {
    f[i][i + k] = temp;
    p[i][i + k] = j;
    }
    }
    printpath(0, N - 1);
    printf("\n");
    }
    int main()
    {
    int t = 0;
    while(init())
    {
    printf("Case %d: ", ++ t);
    solve();
    }
    return 0;
    }


  • 相关阅读:
    CRLF注入
    Windows下消息中间件RabbitMQ安装教程(超详细)
    (超详细)SpringBoot+RabbitMQ+Stomp+JS实现前端消息推送
    数数塔 NBUT 1083
    数数塔 NBUT 1083
    数塔 HDU 2084
    数塔 HDU 2084
    数塔 HDU 2084
    递推
    递推
  • 原文地址:https://www.cnblogs.com/staginner/p/2237187.html
Copyright © 2011-2022 走看看