• UVA 348 Optimal Array Multiplication Sequence


    这道题的输出路径是个问题,仔细体会。

    代码:

    #include<stdio.h>
    #include<string.h>
    #define MAXN 10 + 5
    int A[MAXN][2], f[MAXN][MAXN],part1[MAXN][MAXN];
    int n;
    void printpath(int a, int b)
    {
    if(a == b)
    {
    printf("A%d", a + 1);
    return ;
    }
    printf("(");
    printpath(a, part1[a][b]);
    printf(" x ");
    printpath(part1[a][b] + 1, b);
    printf(")");
    }
    void dp()
    {
    memset(f,0,sizeof(f));
    //memset(part1,-1,sizeof(part1));
    for(int i = 1; i < n; i ++)
    for(int j = 0; j < n-i; j ++)
    {
    for(int k = j; k < i+j; k ++)
    {
    if(k == j)
    {
    f[j][i+j] = f[j][k]+f[k+1][i+j]+A[j][0]*A[k][1]*A[i+j][1];
    part1[j][i+j] = k;
    }
    if(f[j][k]+f[k+1][i+j]+A[j][0]*A[k][1]*A[j+i][1] < f[j][i+j])
    {
    f[j][i+j] = f[j][k]+f[k+1][i+j]+A[j][0]*A[k][1]*A[j+i][1];
    part1[j][i+j] = k;
    }
    }
    }
    }
    void input()
    {
    int num = 0;
    while(scanf("%d",&n) == 1)
    {
    if(n == 0) break;
    for(int i = 0; i < n; i ++)
    scanf("%d%d",&A[i][0],&A[i][1]);
    dp();
    printf("Case %d: ",++ num);
    printpath(0,n-1);
    puts("");
    }
    }
    int main()
    {
    input();
    return 0;
    }



  • 相关阅读:
    位运算
    方法重载
    基本数据类型与引用数据类型参数
    带返回值方法的定义格式
    return使用
    方法的通用格式
    方法定义的格式
    google chrome developer tools
    Skolelinux
    ajax
  • 原文地址:https://www.cnblogs.com/yuzhaoxin/p/2404050.html
Copyright © 2020-2023  润新知