Problem
Solution
把一个字符串分割成【0,99】之间的数,不能够有重复,问有多少种切法。
如999可以分割成9和99或者99和9.
解法就是对每一位数都进行dfs,每次选择一位或者两位往下继续dfs,如果不行则返回上一级,这样其实相当于是一种剪枝,当时以为会炸结果赛后跑了一遍发现能过,果然人不能太怂就是干。我的代码太丑了,贴一份队友的。
Code
#include<iostream>
#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
#define ll long long
int num[100];
char s[100];
int ans = 0;
void dfs(int x)
{
if(x >= strlen(s))
{
ans++;
return;
}
int next;
for(int i=1;i<=2;i++)
{
if(i == 1)
{
next = s[x]-'0';
if(num[next] == 0)
{
num[next]++;
dfs(x+1);
num[next]--;
}
}
else if(s[x] != '0'&&x+1<strlen(s))
{
next = 10*(s[x]-'0') + (s[x+1]-'0');
if(num[next] == 0)
{
num[next]++;
dfs(x+2);
num[next]--;
}
}
}
}
int main()
{
while(~scanf("%s",s))
{
ans = 0;
memset(num,0,sizeof(num));
dfs(0);
printf("%d\n",ans);
}
return 0;
}