草稿

#include <bits/stdc++.h>
//CLOCKS_PER_SEC
#define se second
#define fi first
#define ll long long
#define Pii pair<int,int>
#define Pli pair<ll,int>
#define ull unsigned long long
#define pb push_back
#define ALL(x) x.begin(),x.end()
#define fio ios::sync_with_stdio(false);cin.tie(0);
#define db double
const double Pi=3.14159265;
const int N=1e5+10;
const ull base=163;
const int INF=0x3f3f3f3f;
const int mod=192600817;
const db eps=1e-10;
const db pi=acos(-1);
using namespace std;
ll ma[10][808],mi[10][808];
ll mam[108][808],mim[108][808];
char s[108];
ll nu[108],nuu[9];
ll dp[10][108];
ll ta[10];
ll w[10]={6,2,5,5,4,5,6,3,7,6};
int main(){
    int t,n;
    ta[1]=1;
    for(int i=2;i<=9;i++){
        ta[i]=ta[i-1]*10;
    }
    for(int k=0;k<9;k++)
            for(int kk=0;kk<108;kk++)
                dp[k][kk]=-INF;
    dp[0][0]=0;
    for(int i=1;i<=9;i++){
        for(int k=0;k<108;k++){
                for(int hh=0;hh<=9;hh++){
                    for(int jj=0;jj<=k-w[hh];jj++){
                        dp[i][jj+w[hh]]=max(dp[i-1][jj]+ta[i]*hh,dp[i][jj+w[hh]]);
                    }
                }
                ma[i][k]=dp[i][k];
            }
        }
    for(int k=0;k<9;k++)
            for(int kk=0;kk<108;kk++)
                dp[k][kk]=INF;
    dp[0][0]=0;
    for(int i=1;i<=9;i++){
        for(int k=0;k<108;k++){
                for(int hh=0;hh<=9;hh++){
                    for(int jj=0;jj<=k-w[hh];jj++){
                        dp[i][jj+w[hh]]=min(dp[i-1][jj]+ta[i]*hh,dp[i][jj+w[hh]]);
                    }
                }
                mi[i][k]=dp[i][k];
            }

        }
    cin>>t;
    while(t--){
        int cnt=0;
        scanf("%d",&n);
        scanf("%s",s);
        int now=0;
        int st=0;
        for(int i=1;i<=9;i++){
            nuu[i]=0;
        }
        for(int i=0;s[i];i++){
            if(s[i]>='0'&&s[i]<='9'){
                now++;
                st+=w[s[i]-'0'];
            }
            else{
                if(s[i]=='+'){
                    st+=2;
                }
                else{
                    st++;
                }
                nu[cnt++]=now;
                now=0;
            }
        }
        nu[cnt++]=now;
        sort(nu+1,nu+cnt,greater<int>());
        for(int j=0;j<cnt;j++){
                for(int i=0;i<=j;i++){
                    for(int kk=0;kk<=st;kk++){
                        mam[j][kk]=-INF;
                    }
                }
            for(int h=0;h<=st;h++){
                    for(int kk=0;kk<=st-h;kk++){
                        if(j==0){
                            mam[j][kk]=max(ma[nu[j]][kk],mam[j][kk]);
                        }
                        else
                        mam[j][kk+h]=max(mam[j-1][kk]+ma[nu[j]][h],mam[j][kk+h]);
                    }
                }
            }
        for(int j=cnt-1;j>=1;j--){
                for(int i=cnt-1;i>=j;i--){
                    for(int kk=0;kk<=st;kk++){
                        mim[j][kk]=INF;
                    }
                }
            for(int h=0;h<=st;h++){
                    for(int kk=0;kk<=st-h;kk++){
                        if(j==0){
                            mim[j][kk]=min(mi[nu[j]][kk],mim[j][kk]);
                        }
                        else
                        mim[j][kk+h]=min(mim[j+1][kk]+mi[nu[j]][h],mim[j][kk+h]);
                    }
                }
            }
        ll ans=0;
        int g=0;
        int h=0;
        int k=0;
        for(int i=0;i<cnt;i++){
            k+=nu[i];
        }
        for(int i=0;i<cnt;i++){
            h+=nu[i];
            g=2*i+cnt-i-1;
            for(int j=2*i;j<=st&&st-j-g>=(k-h)*2;j++){
                if(i!=cnt-1)

                ans=max(mam[i][j]-mim[i+1][st-j-g],ans);
                else
                ans=max(mam[i][j],ans);
                cout<<i<<' '<<j<<' '<<mam[i][j]<<endl;
                cout<<i+1<<' '<<st-j-g<<' '<<mim[i+1][st-j-g]<<endl;
            }
        }
        printf("%lld\n",ans);
    }
    return 0;
}

  

#include <bits/stdc++.h>//CLOCKS_PER_SEC#define se second#define fi first#define ll long long#define Pii pair<int,int>#define Pli pair<ll,int>#define ull unsigned long long#define pb push_back#define ALL(x) x.begin(),x.end()#define fio ios::sync_with_stdio(false);cin.tie(0);#define db doubleconst double Pi=3.14159265;const int N=1e5+10;const ull base=163;const int INF=0x3f3f3f3f;const int mod=192600817;const db eps=1e-10;const db pi=acos(-1);using namespace std;ll ma[10][808],mi[10][808];ll mam[108][808],mim[108][808];char s[108];ll nu[108],nuu[9];ll dp[10][108];ll ta[10];ll w[10]={6,2,5,5,4,5,6,3,7,6};int main(){    int t,n;    ta[1]=1;    for(int i=2;i<=9;i++){        ta[i]=ta[i-1]*10;    }    for(int k=0;k<9;k++)            for(int kk=0;kk<108;kk++)                dp[k][kk]=-INF;    dp[0][0]=0;    for(int i=1;i<=9;i++){        for(int k=0;k<108;k++){                for(int hh=0;hh<=9;hh++){                    for(int jj=0;jj<=k-w[hh];jj++){                        dp[i][jj+w[hh]]=max(dp[i-1][jj]+ta[i]*hh,dp[i][jj+w[hh]]);                    }                }                ma[i][k]=dp[i][k];            }        }    for(int k=0;k<9;k++)            for(int kk=0;kk<108;kk++)                dp[k][kk]=INF;    dp[0][0]=0;    for(int i=1;i<=9;i++){        for(int k=0;k<108;k++){                for(int hh=0;hh<=9;hh++){                    for(int jj=0;jj<=k-w[hh];jj++){                        dp[i][jj+w[hh]]=min(dp[i-1][jj]+ta[i]*hh,dp[i][jj+w[hh]]);                    }                }                mi[i][k]=dp[i][k];            }
        }    cin>>t;    while(t--){        int cnt=0;        scanf("%d",&n);        scanf("%s",s);        int now=0;        int st=0;        for(int i=1;i<=9;i++){            nuu[i]=0;        }        for(int i=0;s[i];i++){            if(s[i]>='0'&&s[i]<='9'){                now++;                st+=w[s[i]-'0'];            }            else{                if(s[i]=='+'){                    st+=2;                }                else{                    st++;                }                nu[cnt++]=now;                now=0;            }        }        nu[cnt++]=now;        sort(nu+1,nu+cnt,greater<int>());        for(int j=0;j<cnt;j++){                for(int i=0;i<=j;i++){                    for(int kk=0;kk<=st;kk++){                        mam[j][kk]=-INF;                    }                }            for(int h=0;h<=st;h++){                    for(int kk=0;kk<=st-h;kk++){                        if(j==0){                            mam[j][kk]=max(ma[nu[j]][kk],mam[j][kk]);                        }                        else                        mam[j][kk+h]=max(mam[j-1][kk]+ma[nu[j]][h],mam[j][kk+h]);                    }                }            }        for(int j=cnt-1;j>=1;j--){                for(int i=cnt-1;i>=j;i--){                    for(int kk=0;kk<=st;kk++){                        mim[j][kk]=INF;                    }                }            for(int h=0;h<=st;h++){                    for(int kk=0;kk<=st-h;kk++){                        if(j==0){                            mim[j][kk]=min(mi[nu[j]][kk],mim[j][kk]);                        }                        else                        mim[j][kk+h]=min(mim[j+1][kk]+mi[nu[j]][h],mim[j][kk+h]);                    }                }            }        ll ans=0;        int g=0;        int h=0;        int k=0;        for(int i=0;i<cnt;i++){            k+=nu[i];        }        for(int i=0;i<cnt;i++){            h+=nu[i];            g=2*i+cnt-i-1;            for(int j=2*i;j<=st&&st-j-g>=(k-h)*2;j++){                if(i!=cnt-1)
                ans=max(mam[i][j]-mim[i+1][st-j-g],ans);                else                ans=max(mam[i][j],ans);                cout<<i<<' '<<j<<' '<<mam[i][j]<<endl;                cout<<i+1<<' '<<st-j-g<<' '<<mim[i+1][st-j-g]<<endl;            }        }        printf("%lld\n",ans);    }    return 0;}

 

上一篇:哪天返回


下一篇:Leetcode 108