深搜90pts,TLE*3求调
查看原帖
深搜90pts,TLE*3求调
1261547
belif__kibo楼主2024/8/1 00:01
#include<bits/stdc++.h>
using namespace std;
int n,dx[41][41],lenx,ans=0x7fffffff;
string x;
void dfs(int p,int pre,int cnt,int tot)
{
	if(tot>n) return;
	if(p==lenx)
	{
		tot+=dx[pre+1][p];
		if(tot==n) ans=min(ans,cnt);
		return;
	}
	dfs(p+1,p,cnt+1,tot+dx[pre+1][p]);
	if(dx[pre+1][p]<=n) dfs(p+1,pre,cnt,tot);
}
int main()
{
	cin>>x;
	lenx=x.size();
	scanf("%d",&n);
	for(int i=1;i<=lenx;i++) for(int j=i;j<=lenx&&dx[i][j-1]<=100000000;j++) dx[i][j]=(dx[i][j-1]<<3)+(dx[i][j-1]<<1)+x[j-1]-'0';
	dfs(1,0,0,0);
	if(ans==0x7fffffff) printf("-1");
	else printf("%d",ans);
}

T点如右:提交

2024/8/1 00:01
加载中...