比赛 |
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;
}