zoukankan      html  css  js  c++  java
  • icpc2018焦作Mathematical Curse(动态规划)

    传送门

    ac代码:

    #include<bits/stdc++.h>
    #define per(i,a,b) for(int i=a;i<=b;i++)
    using namespace std;
    typedef long long ll;
    //#define int long long
    const ll inf =2333333333333333LL;
    const double eps=1e-8;
    int read(){
        char ch=getchar();
        int res=0,f=0;
        while(ch<'0' || ch>'9'){f=(ch=='-'?-1:1);ch=getchar();}
        while(ch>='0'&&ch<='9'){res=res*10+(ch-'0');ch=getchar();}
        return res*f;
    }
    // ------------------------head
    #define mod 1000000009
    const int siz=10005;
    ll dp[1005][6],k;
    int T,n,m,a[1005];
    char ch[6];
    ll fun(int rhs,ll d,char op){
        if(op=='+')return d+(ll)rhs;
        else if(op=='-')return d-(ll)rhs;
        else if(op=='*')return d*(ll)rhs;
        else if(op=='/')return d/(ll)rhs; 
    }
    
    signed main()
    {
        scanf("%d",&T);
        while(T--){
            scanf("%d%d%lld",&n,&m,&k);
            ll ans=-inf;
            per(i,1,n)scanf("%d",&a[i]);
            per(i,1,m)cin>>ch[i];
            ll _mi[1005][6];
            per(i,0,n)dp[i][0]=_mi[i][0]=k;
            per(i,1,m){per(j,0,n)_mi[j][i]=inf;per(j,0,n)dp[j][i]=-inf;}
            per(i,1,n){
                dp[i][1]=max(dp[i-1][1],fun(a[i],k,ch[1]));
                _mi[i][1]=min(_mi[i-1][1],fun(a[i],k,ch[1]));
            }
            per(i,2,m){//区分正数和负数
                per(j,i,n){
                    if(a[j]<0&&(ch[i]=='*'||ch[i]=='/')){
                        dp[j][i]=max(dp[j-1][i],fun(a[j],_mi[j-1][i-1],ch[i]));
                        _mi[j][i]=min(_mi[j-1][i],fun(a[j],dp[j-1][i-1],ch[i]));
                    }
                    else {
                        ll ma=dp[j-1][i-1];
                        dp[j][i]=max(dp[j-1][i],fun(a[j],dp[j-1][i-1],ch[i]));
                        _mi[j][i]=min(_mi[j-1][i],fun(a[j],_mi[j-1][i-1],ch[i]));
                    }
                }
            }
            if(m==1){
                ll res=-inf;
                per(i,1,n)res=max(res,dp[i][1]);
                printf("%lld
    ",res);
            }
            else printf("%lld
    ",dp[n][m]);
        }
        return 0;
    }
  • 相关阅读:
    VS2015快捷键
    layui radio 监听
    jsvascript === 和==的区别
    bootstrap table checkbox 根据值选中、禁用等
    table 中 display为 block 时 tbody 失去宽度
    打包成Zip
    Server.MapPath()用法
    JS比较当前时间是否在指定时间段内
    从多张表获取数据,重组DataTable,根据重组路径,打包下载文件。
    checkbox 根据值选中
  • 原文地址:https://www.cnblogs.com/WindFreedom/p/9652304.html
Copyright © 2011-2022 走看看