求助
有大佬看一下有什么特殊情况没考虑到吗?
#include <bits/stdc++.h>
#define N 100100using namespace std;
int k,cnt[10],cur[10],dp[N][3][10];
bool flg[N][10];
string s;
void modify(int i,int j,int prei,int prej,int k)
{
int tmp[10];
for (int t=0;t<10;t++) tmp[t]=dp[prei][prej][t];
tmp[k]++;
bool flag=0;
for (int t=9;~t;t--)
{
if (tmp[t]>dp[i][j][t])
{
flag=1;break;
}
else if (tmp[t]<dp[i][j][t])
break;
}
if (flag)
{
for (int t=0;t<10;t++)
dp[i][j][t]=tmp[t];
flg[i][j]=1;
}
}
int main()
{
int t;
cin>>t;
while (t--)
{
cin>>s>>k;
memset(cnt,0,sizeof(cnt));
memset(dp,0,sizeof(dp));
memset(flg,0,sizeof(flg));
int n=s.length();
for (int i=0;i<n;i++) cnt[s[i]-'0']++;
for (int i=9;~i;i--)
{
if (cnt[i]>0 && !flg[1][i%3])
{
flg[1][i%3]=1;
dp[1][i%3][i]=1;
}
}
for (int i=1;i<k;i++)
{
for (int j=0;j<3;j++)
{
if (!flg[i][j]) continue;
for (int k=0;k<10;k++) cur[k]=dp[i][j][k];
for (int k=9;~k;k--)
{
if (cnt[k]>cur[k])
{
modify(i+1,(j+k)%3,i,j,k);
}
}
}
}
bool flag=0;
for (int i=9;~i;i--)
{
if (!flag && i==0 && k>1)
{
break;
}
while (dp[k][0][i]--)
{
flag=1;
cout<<i;
}
}
if (!flag) cout<<-1<<endl; else cout<<endl;
}
return 0;
}