• 矩阵连乘 和表达式加括号求最大值


     矩阵连乘核心代码
    1
    for(int i=0;i<=n;i++) 2 m[i][j]=0; 3 for(r=1;r<n;r++) 4 for(i=1;i<=n-r;i++) 5 { 6 j=i+r; 7 m[i][j]=m[i+1][j]+p[i-1]*p[i]*p[j]; 8 s[i][j]=i; 9 for(k=i+1;k<j;k++) 10 { 11 int t=m[i][k]+m[k+1][j]+p[i-1]*p[k]*p[j]; 12 if(t<m[i][j]) 13 { 14 m[i][j]=t; 15 s[i][j]=k; 16 } 17 } 18 }

    表达式求最大值

      1 /*
      2     Name: 
      3     Copyright: 
      4     Author: 
      5     Date: 13/08/14 22:32
      6     Description: 
      7     矩阵连乘
      8     A1*A2*……An
      9     m[i][j]表示AI到AJ这个整体的矩阵的最大值  m[i][i]=0;
     10     设他们在K处断开。
     11     则有m[i][j]=m[i][k]+m[k+1][j]+p(i-1)*pi*pj;i<=k<j; 
     12     现在给出一个表达式,运算符号只有+  *,运算对象为整数。
     13     加括号求最大值    
     14 */
     15 #include"iostream"
     16 #include"cstring"
     17 #include"algorithm"
     18 #include"cstdio"
     19 using namespace std;
     20 #define SUM 101
     21 #define MAX 0x7fffffff
     22 #define MIN -0x7fffffff
     23 int n,num[SUM],ope[SUM],a[4];
     24 struct rem{
     25     int max;
     26     int min;
     27 }; 
     28 rem result[SUM][SUM];
     29 rem cmp(int a1,int a2,int b1,int b2)
     30 {
     31     int i=0;
     32     int max=MIN,min=MAX,tmp; 
     33     if((tmp=a1*b1)>max)
     34         max=tmp;
     35     if(tmp<min)
     36         min=tmp;
     37     if((tmp=a1*b2)>max)
     38         max=tmp;
     39     if(tmp<min)
     40         min=tmp;
     41     if((tmp=a2*b1)>max)
     42         max=tmp;
     43     if(tmp<min)
     44         min=tmp;
     45     if((tmp=a2*b2)>max)
     46         max=tmp;
     47     if(tmp<min)
     48         min=tmp;
     49     rem p;
     50     p.max=max;
     51     p.min=min;
     52     return p;
     53 }
     54 rem maxv(int i,int j)
     55 {
     56     if(i==j)
     57     {
     58         result[i][j].max=num[i];
     59         result[i][j].min=num[i];
     60         return result[i][j];
     61     }
     62     if(i<j)
     63     {
     64         if(result[i][j].max!=MIN)
     65             return result[i][j];
     66         else
     67         {
     68             for(int t=i;t<j;t++)
     69             {
     70                 rem tmpa=maxv(i,t);
     71                 rem tmpb=maxv(t+1,j);
     72                 if(ope[t]==1)
     73                 {
     74                     rem c=cmp(tmpa.max,tmpa.min,tmpb.max,tmpb.min);
     75                     if(c.max>result[i][j].max)
     76                         result[i][j].max=c.max;
     77                     if(c.min<result[i][j].min)
     78                         result[i][j].min=c.min;
     79                 }
     80                 else
     81                 {
     82                     int mm=tmpa.max+tmpa.max;
     83                     if(mm>result[i][j].max)
     84                         result[i][j].max=mm;
     85                     int mi=tmpa.min+tmpb.min;
     86                     if(mi<result[i][j].min)
     87                         result[i][j].min=mi;
     88                 }
     89             }
     90             return result[i][j];
     91         }
     92     }
     93 }
     94 int main()
     95 {
     96     char ch;
     97     while(scanf("%d",&n)!=EOF)
     98     {
     99         for(int i=1;i<n;i++)
    100         {
    101             scanf("%d",&num[i]);
    102             getchar();
    103             scanf("%c",&ch);
    104             if(ch=='*')
    105                 ope[i]=1;
    106             else
    107                 ope[i]=0;
    108         }
    109         scanf("%d",&num[n]);
    110         for(int i=0;i<=n;i++)
    111             for(int j=0;j<=n;j++)
    112             {
    113                 result[i][j].max=MIN;
    114                 result[i][j].min=MAX;
    115             }
    116         int max=maxv(1,n).max;
    117         printf("%d
    ",max);
    118     }
    119     return 0;
    120 }
  • 相关阅读:
    「BZOJ4763」雪辉
    「CSA72」MST
    「CSA49」Bunny on Number Line
    「CSA49」Card Collecting Game
    Java indexOf() 方法
    MySQL执行计划分析
    NIO编程
    数据结构可视化
    深入理解二阶段提交协议(DDB对XA悬挂事务的处理分析)(一)
    linux下nohup日志切割方案
  • 原文地址:https://www.cnblogs.com/767355675hutaishi/p/3911420.html
Copyright © 2020-2023  润新知