zoukankan      html  css  js  c++  java
  • hoj1249 Optimal Array Multiplication Sequence 矩阵链乘

    矩阵链乘法:
    矩阵P={}


    标准模板:
    for(int i=2;i<=n;i++)
    for(int j=1;j<=n-i+1;j++)
    {
    int temp = i+j-1;
    dp[j][temp] = 1000000000;
    for(int k=j;k<=temp-1;k++)
    {
    v = dp[j][k]+dp[k+1][temp]+p[j-1]*p[k]*p[temp];
    if(v<dp[j][temp])
    {
    dp[j][temp] = v;
    s[j][temp] = k;
    }
    }
    }
    相乘次数(答案) = dp[1][n]

    打印最佳链乘表达式:
    void print(int i,int j)
    {
    if(i==j)
    cout<<"A"<<i;
    else
    {
    cout<<"(";
    print(i,s[i][j]);
    //cout<<"*";是否带乘号*
    print(s[i][j]+1,j);
    cout<<")";
    }
    }


    #include <iostream>
    #include <cstring>
    using namespace std;
    #define X 11
    int p[X];
    int dp[X][X];
    int s[X][X];
    void print(int i,int j)
    {
    if(i==j)
    cout<<"A"<<i;
    else
    {
    cout<<"(";
    print(i,s[i][j]);
    cout<<" x ";
    print(s[i][j]+1,j);
    cout<<")";
    }
    }
    int main()
    {
    freopen("sum.in","r",stdin);
    freopen("sum.out","w",stdout);
    int n;
    int counter = 0;
    int x,y,v;
    while(cin>>n,n)
    {
    counter++;
    for(int i=1;i<=n;i++)
    {
    cin>>x>>y;
    p[i-1] = x;
    }
    p[n] = y;
    for(int i=1;i<=n;i++)
    dp[i][i] = 0;

    for(int i=2;i<=n;i++)
    for(int j=1;j<=n-i+1;j++)
    {
    int temp = i+j-1;
    dp[j][temp] = 1000000000;
    for(int k=j;k<=temp-1;k++)
    {
    v = dp[j][k]+dp[k+1][temp]+p[j-1]*p[k]*p[temp];
    if(v<dp[j][temp])
    {
    dp[j][temp] = v;
    s[j][temp] = k;
    }
    }
    }
    //cout<<dp[1][n]<<endl;
    cout<<"Case "<<counter<<": ";
    print(1,n);
    cout<<endl;
    }

    return 0;
    }

  • 相关阅读:
    webview 缓存
    winform 托盘
    winform自动保存属性变更
    序列化条件
    System.Web.HttpUtility VS System.Net.WebUtility
    javascript模拟sleep
    C#实现把科学计数法(E)转化为正常数字值 (转)
    appium远程连手机调控
    adb通过wifi连接android设备
    在项目中接口测试时怎么做的?
  • 原文地址:https://www.cnblogs.com/yejinru/p/2374711.html
Copyright © 2011-2022 走看看