分析:判断一个数是不是“魔数”,直接递归判断(刚开始还以为会超时)
#include <iostream>
#include<cstring>
#include<vector>
#include<stdio.h>
#include<queue>
#include<math.h>
#include<stack>
#include<algorithm>
#include<map>
#include<set>
#include<iostream>
using namespace std;
#define MAX 100001
#define MM 1020
typedef long long ll;
int n,m,k;
int f;
string c[3] = {
"1","14","144"};
void dfs(string s,int len,int i)
{
if(i == len){
f = 1;
return;
}
if(s.substr(i,1) == c[0])
dfs(s,len,i+1);
if(s.substr(i,2) == c[1])
dfs(s,len,i+2);
if(s.substr(i,3) == c[2])
dfs(s,len,i+3);
}
int main()
{
string s;cin>>s;
int len = s.size();
dfs(s,len,0);
if(!f)
cout<<"NO";
else
cout<<"YES";
return 0;
}