zoukankan      html  css  js  c++  java
  • 1017 乘积最大 2000年NOIP全国联赛普及组NOIP全国联赛提高组

    1017 乘积最大

     

    2000年NOIP全国联赛普及组NOIP全国联赛提高组

     

     
    #include <iostream>
    #include <string>
    #include <cstdio>
    #include <vector>
    #include <algorithm>
    #include <deque>
    #include <stack>
    using namespace std;
    typedef long long LL;
    const int MAXN = 2009;
    #define INF 0x3f3f3f3f
    #define MAXN 100
    
    /*
    错误:
    dp[i][j] 前i为用了j个*号的最大值
    dp[i+1][j] = max(dp[i+1][j],dp[i][j]*10 + a[i+1])
    dp[i+1][j+1] = max(dp[i+1][j+1], dp[i][j]*a[i+1])
    错在没能保证乘法运算在合成数字之后计算
    正确:
    从小到大枚举乘号的个数,然后再枚举从前到后的位置, 预处理一下每个区间的数字,
    */ int dp[MAXN][MAXN];//到i用j个 *号的值 char str[MAXN]; int tmp[MAXN][MAXN]; int n, m; int cal(int i, int j) { int ret = 0; for (int p = i; p <= j; p++) { ret = ret * 10 + str[p] - '0'; } return ret; } int main() { ios::sync_with_stdio(0); cin >> n >> m; cin >> (str + 1); for (int i = 1; i <= n; i++) { for (int j = i; j <= n; j++) { tmp[i][j] = cal(i, j); } dp[i][0] = cal(1, i); } for (int i = 1; i <= n; i++)//乘号个数 { for (int j = 1; j <= n; j++)//到达的位置 { for (int k = 1; k <= j; k++) dp[j][i] = max(dp[j][i], dp[k][i - 1] * tmp[k + 1][j]); } } cout << dp[n][m] << endl; return 0; }
  • 相关阅读:
    OLAP ODS项目的总结 平台选型,架构确定
    ORACLE ORA12520
    ORACLE管道函数
    ORACLE RAC JDBC 配置
    ORACLE RAC OCFS连接产生的错误
    ORACLE 启动和关闭详解
    OLAP ODS项目的总结 起步阶段
    ORACLE RAC 配置更改IP
    ORACLE RAC OCR cann't Access
    ORACLE RAC Debug 之路 CRS0184错误与CRS初始化
  • 原文地址:https://www.cnblogs.com/joeylee97/p/7608451.html
Copyright © 2011-2022 走看看