比赛 20220531高一小测验 评测结果 AAAWWWWWWW
题目名称 添加号 最终得分 30
用户昵称 Lesater 运行时间 0.029 s
代码语言 C++ 内存使用 1.16 MiB
提交时间 2022-06-01 20:14:58
显示代码纯文本
#include<bits/stdc++.h>
using namespace std;
string s;
int m,k;
unsigned long long all[201][21],nub[201][21],last=LONG_LONG_MAX;
unsigned long long cut(int a,int b)
{
    unsigned long long cnt=0;
    for(int i=a;i<=b;++i)
    {
        cnt*=10;
        cnt+=s[i]-'0';
    }
    return cnt;
}
void begin()
{
    for(int i=0;i<s.size()-1;++i)
    {
        all[i][1]=cut(0,i);
        nub[i][1]=cut(0,i)+cut(i+1,s.size()-1);
    }
    return;
}
int main()
{
    freopen("exam4.in","r",stdin);
    freopen("exam4.out","w",stdout);
    cin>>s>>m;    
    for(int i=0;i<201;++i)
    for(int j=1;j<=20;++j)
    {
    all[i][j]=INT_MAX; nub[i][j]=INT_MAX;
    }
    begin();
    if(m==1)
    {
        for(int i=0;i<s.size();++i)
        last=min(last,nub[i][1]);
    }
    else
    {
    for(int i=2;i<=m;++i)
    {
        for(int j=i-1;j<s.size();++j)
        {
            unsigned long long l=cut(j+1,s.size()-1);
            for(int k=0;k<j;++k)
            {
            all[j][i]=min(all[j][i],all[k][i-1]+cut(k+1,j));
            nub[j][i]=min(nub[j][i],all[j][i]+l);
            last=min(last,nub[j][i]);
            }
        }
    }
    }    
    cout<<last;
    return 0;
}