zoukankan      html  css  js  c++  java
  • dp【区间规划】jzoj 1291

    需要输出方案,总之就是麻烦一些0.0

    #include<iostream>
    #include<string>
    #include<cstring>
    #include<cstdio>
    #include<algorithm>
    using namespace std;
    int f[2005][2005];
    int a[2005];
    int sum[2005];
    int sumx[2005][2005];
    string ff[2005][2005];
    char struck[1000000];
    int top=0;
    int n;
    void work()
    {
        for(int i=1;i<=n;i++)
            for(int u=i;u<=n;u++)
            {
                sumx[i][u]=sum[u]-sum[i-1];
            }
        return ;
    }
    string ss(int b)
    {
        string a;
        while(b!=0)
        {
            a=char(b%10+'0')+a;
            b/=10;
        }
        return a;
    }
    int s(string s)
    {
        int k=0;
        for(int i=0;i<s.size();i++)
        {
            k=k*10+s[i]-'0';
        }
        return k;
    }
    int main()
    {
    
        cin>>n;
        for(int i=1;i<=n;i++)
        {
            cin>>a[i];
            sum[i]=sum[i-1]+a[i];
        }
        for(int i=1;i<=n;i++)
            ff[i][i]=ss(a[i]);
        work();
        for(int p=1;p<=n;p++)
            for(int i=1;i<=n;i++)
            {    
                int j=p+i-1;
                if(j>n)break;
                for(int k=j-1;k>=i;k--)
                {
                    if(f[i][k]+f[k+1][j]+sumx[i][j]<f[i][j]||f[i][j]==0)
                    {
                        f[i][j]=f[i][k]+f[k+1][j]+sumx[i][j];
                        ff[i][j]='('+ff[i][k]+'+'+ff[k+1][j]+')';
                    }
                }
            }
            cout<<ff[1][n]<<endl;
            cout<<f[1][n]<<endl;
            string a=ff[1][n];
            for(int i=0;i<a.size();i++)
            {
                struck[++top]=a[i];
                if(struck[top]==')')
                {
                    top--;
                    int w=top;
                    int kk=0;
                    string str1,str2;
                    while(struck[--top]!='(');
                    for(int i=top+1;i<=w;i++)
                    {
                        if(struck[i]=='+')
                        {
                            kk=i;break;
                        }
                        str1=str1+struck[i];
                    }
                    //cout<<i<<"+++";cout<<top<<endl;
                    //cout<<str1<<endl;
                    for(int i=kk+1;i<=w;i++)
                    {
                        str2=str2+struck[i];
                    }
                    int num=s(str2)+s(str1);
                    //cout<<str1<<"+++"<<str2<<endl;
                    cout<<num<<' ';
                    string xx=ss(num);
                    top--;
                    for(int i=0;i<xx.size();i++)
                    {
                        struck[++top]=xx[i];
                    }
                }
            }
        return 0;
    }
  • 相关阅读:
    toString()和toLocaleString()有什么区别
    解决浏览器跨域问题
    JavaScript排序,不只是冒泡
    input disabled的情况下在IOS设备中怎么修改颜色
    jquery api 中文文档
    javascript中var that=this的意思
    JS中(function(){xxx})(); 这种写法的意思
    http-equiv 的使用
    $(function(){......})的意思
    js中(function(){…})()立即执行函数写法理解
  • 原文地址:https://www.cnblogs.com/Lazers/p/6524829.html
Copyright © 2011-2022 走看看