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;
    }


  • 相关阅读:
    bootstrap插件学习-bootstrap.tooltip.js
    1,2,3维数组去重方法
    使用PHP静态变量当缓存的方法
    深思 PHP 数组遍历的差异(array_diff 的实现)
    ecshop学习五
    ecshop学习四
    ecshop学习三
    ecshop学习二
    ecshop学习一
    linux下安装ecshop
  • 原文地址:https://www.cnblogs.com/staginner/p/2237187.html
Copyright © 2011-2022 走看看