区间Dp40pts求调,WA#2,3,4
查看原帖
区间Dp40pts求调,WA#2,3,4
749175
114514xxx楼主2024/10/31 12:35
#include<bits/stdc++.h>
#define int long long
#define int128 __int128
using namespace std;
const int N=1e2+25;
int n,m;
int a[N],s[N],p[N];
int128 f[N][N][N];
inline int sum(int l,int r){return s[r]-s[l-1];}
int max(int a,int b){return a>b?a:b;}
int module(int a){
    if(a>0)return (a%10);
    else return ((10-(abs(a)%10))%10);
}
inline void solve1(){
    memset(f,0,sizeof(f));
    for(int i=1;i<=2*n;i++){
        for(int j=i;j<=2*n;j++)
        f[i][j][1]=module(sum(i,j));
    }
    for(int len=2;len<=2*n;len++){
        for(int l=1;l+len-1<=2*n;l++){
            int r=l+len-1;
            for(int k=l;k<r;k++){
                for(int i=2;i<=min(len,m);i++){
                    for(int p=1;p<i;p++)
                        f[l][r][i]=max(f[l][k][p]*f[k+1][r][m-p],f[l][r][i]);
                }
            }
        }
    }
    int ans=0;
    for(int i=1;i<=n;i++){
        ans=max(ans,f[i][i+n-1][m]);
    }
    cout<<ans<<endl;
}
inline void solve2(){
    memset(f,0x3f,sizeof(f));
    for(int i=1;i<=2*n;i++){
        for(int j=i;j<=2*n;j++)
        f[i][j][1]=module(sum(i,j));
    }
    for(int len=2;len<=2*n;len++){
        for(int l=1;l+len-1<=2*n;l++){
            int r=l+len-1;
            for(int k=l;k<r;k++){
                for(int i=2;i<=min(len,m);i++){
                    for(int p=1;p<i;p++)
                        f[l][r][i]=min(f[l][k][p]*f[k+1][r][m-p],f[l][r][i]);
                }
            }
        }
    }
    int ans=INT_MAX;
    for(int i=1;i<=n;i++){
        ans=min(ans,f[i][i+n-1][m-1]);
    }
    cout<<max(ans,0)<<endl;
}
signed main(){
    //freopen("number.in","r",stdin);
    //freopen("number.out","w",stdout);
    ios::sync_with_stdio(0);
    cin.tie(0),cout.tie(0);
    cin>>n>>m;
    for(int i=1;i<=n;i++)
        cin>>a[i];
    for(int i=n+1;i<=2*n;i++)
        a[i]=a[i-n];
    for(int i=1;i<=2*n;i++)
        s[i]=s[i-1]+a[i];
    for(int i=1;i<=2*n;i++){
        for(int j=i;j<=2*n;j++)
            f[i][j][1]=module(sum(i,j));
    }
    solve2();
    solve1();
}

2024/10/31 12:35
加载中...