HDU 4474 Yet Another Multiple Problem(搜索剪枝)
2016-08-24 10:28
351 查看
题意:给出一个数n,找到n的倍数使这个数不包含m个数字
(n*10+i)%a ,满足这个条件的数字一定是a的倍数,bfs一下,由于数字变大时只与上一次父节点的数字有关,那么直接记录不大于a的模数,进行剪枝
(n*10+i)%a ,满足这个条件的数字一定是a的倍数,bfs一下,由于数字变大时只与上一次父节点的数字有关,那么直接记录不大于a的模数,进行剪枝
#include<cstring> #include<cstdio> #include<iostream> #include<algorithm> #include<queue> using namespace std; int num[15],vis[15],len,vis1[100005]; int a,n; string ans; struct node { string s; int m; node(){} node(string _s,int _m){s=_s,m=_m;} }; queue<node>que; void bfs() { while(que.size()) que.pop(); string s; for(int i=0;i<len;i++) { if(num[i]==0) continue; s=""; char c=num[i]+'0'; s+=c; if(num[i]%a==0) { ans=s; return ; } que.push(node(s,num[i]%a)); } while(que.size()) { node k=que.front(); que.pop(); if(k.s.length()>ans.length()&&ans!="") return ; if(k.m==0) { if(ans=="") ans=k.s; else ans=min(ans,k.s); continue; } if(vis1[k.m]) continue; vis1[k.m]=1; for(int i=0;i<len;i++) { char c=num[i]+'0'; node tmp=k; tmp.s+=c; tmp.m=tmp.m*10+num[i]; tmp.m%=a; que.push(tmp); } } } int main() { int ca=1; while(scanf("%d",&a)!=EOF) { memset(vis,0,sizeof vis); memset(vis1,0,sizeof vis1); scanf("%d",&n); for(int i=0;i<n;i++) { int temp; scanf("%d",&temp); vis[temp]=1; } len=0; for(int i=0;i<10;i++) { if(!vis[i]) num[len++]=i; } ans=""; bfs(); printf("Case %d: ",ca++); if(ans=="") cout<<"-1"<<endl; else cout<<ans<<endl; } return 0; }
相关文章推荐
- hdu 4474 Yet Another Multiple Problem(按位枚举,4级)
- HDU-#4474 Yet Another Multiple Problem(BFS)
- hdu 4474 Yet Another Multiple Problem bfs
- HDU---4474 Yet Another Multiple Problem【广度优先搜索】
- HDU 4474 Yet Another Multiple Problem
- hdu 4474 Yet Another Multiple Problem(BFS)
- HDU 4474 HDOJ Yet Another Multiple Problem 2012ACM亚洲赛成都赛区K题
- HDU 4474:Yet Another Multiple Problem
- HDU 4474 Yet Another Multiple Problem bfs枚举所有余数
- hdu 4474 Yet Another Multiple Problem
- hdu 4474 Yet Another Multiple Problem 模型转换 BFS搜索 根据剩余类建图广搜
- HDU 4474 Yet Another Multiple Problem【2012成都regional K题】 【BFS+一个判断技巧】
- HDU 4474 Yet Another Multiple Problem
- HDU 4474 Yet Another Multiple Problem【BFS+一个判断技巧】
- HDU 4474(Yet Another Multiple Problem)(BFS+同余定理)
- HDU 4474 Yet Another Multiple Problem(12年成都区域赛-K题-BFS)
- hdu 4474 Yet Another Multiple Problem
- [bfs+余数判重+路径记录] hdu 4474 Yet Another Multiple Problem
- HDU 4474 Yet Another Multiple Problem
- hdu 4474 Yet Another Multiple Problem(BFS)