zoukankan      html  css  js  c++  java
  • poj 1651 Multiplication Puzzle

    题意:一系列的数字,除了头尾不能动,每次取出一个数字,这个数字与左右相邻数字的乘积为其价值,最后将所有价值加起来,要求最小值
    思路:求出每个区间的最小值,一直扩散到整个区间
     1 #include<iostream>  
     2 #include<cstdio>  
     3 #include<cstring> 
     4 #include <cmath> 
     5 #include<stack>
     6 #include<vector>
     7 #include<map> 
     8 #include<set>
     9 #include<queue> 
    10 #include<algorithm>  
    11 using namespace std;
    12 
    13 int dp[1005][1005];
    14 int ans[1005];
    15 
    16 int main()
    17 {
    18     int num;
    19     while(cin>>num)
    20     {
    21         for(int i=1;i<=num;i++)
    22             scanf("%d",&ans[i]);
    23         memset(dp,0,sizeof(dp));
    24         for(int l=2;l<num;l++)//长度从2开始枚举  
    25         {  
    26             for(int i=2;i+l<=num+1;i++)  
    27             {  
    28                 int j=i+l-1;  
    29                 dp[i][j] = 100000000;  
    30                 for(int k=i;k<j;k++)//枚举中点  
    31                     dp[i][j] = min(dp[i][j],dp[i][k]+dp[k+1][j]+ans[i-1]*ans[k]*ans[j]);  
    32             }  
    33         }  
    34         printf("%d
    ",dp[2][num]);
    35     }
    36     return 0;
    37 }
  • 相关阅读:
    ASP.NET WEB API构建基于REST风格
    .net平台下深拷贝和浅拷贝
    Visual Studio 必备神器
    sql注入
    proxy
    职场人生
    JSch
    何时用继承,何时用组合
    视频码率,帧率和分辨率的联系与差别
    超过响应缓冲区限制
  • 原文地址:https://www.cnblogs.com/pter/p/5513249.html
Copyright © 2011-2022 走看看