SPOJ_AMR10I_Dividing Stones(DFS)
来源:互联网 发布:淘宝有多少分可以扣 编辑:程序博客网 时间:2024/06/14 15:52
题型:搜索
题意:
对N进行整数拆分,每种拆分方法求积得到一个值,问不同的值有多少。
例如
n=5:
1=1*1*1*1*1
2=2*1*1*1
3=3*1*1
4=4*1
5=5
6=2*3
ans = 6
分析:
问不同的积的个数,由于整数又可以用素数之积来表示,所以即使不用素数,最后得出的积也可以由素数之积得出,因此可以用70以内的素数已经搜索,而且整数可以用素数之和来表示,所以dfs时,用选与不选当前这个素数来深搜,若当前的n小于当前的素数值,则return
代码:
#include<iostream>#include<cstring>#include<cstdio>#include<cmath>#include<set>#define LL long longusing namespace std;int pri[] = {2 ,3 ,5 ,7 ,11 ,13 ,17 ,19 ,23 ,29 ,31 ,37 ,41 ,43 ,47 ,53 ,59 ,61 ,67 ,71};///20int n,p;set<LL> ans;void dfs(int pos,int now,LL mul){ ans.insert(mul); if(now < pri[pos]) return; ///用pri[pos] dfs(pos,now-pri[pos],mul*pri[pos]%p); ///不用pri[pos] dfs(pos+1,now,mul);}int main() { int _; scanf("%d",&_); while(_--){ scanf("%d%d",&n,&p); ans.clear(); dfs(0,n,1); printf("%d\n",ans.size()); } return 0;}/**2 ,3 ,5 ,7 ,11 ,13 ,17 ,19 ,23 ,29 ,31 ,37 ,41 ,43 ,47 ,53 ,59 ,61 ,67 ,71*/
0 0
- SPOJ_AMR10I_Dividing Stones(DFS)
- Escape from Stones -DFS
- SPOJ AMR10I Dividing Stones --DFS
- UVALive 5116 Dividing Stones(dfs + 打表)
- CodeForces 264A Escape from Stones dfs
- [CodeForces264A]Escape from Stones[dfs][two pointers]
- Stones
- Stones
- Stones
- Stones
- Stones
- DFS、栈、双向队列:CF264A- Escape from Stones
- 3stones
- HDU1896- Stones
- Dividing Stones
- Dividing Stones
- Gem Stones
- HDU1896-Stones
- QCamera的使用方法,包含截图并且保存图片等简单功能
- /usr/bin/ld: error: cannot find -lGL
- UVA - 10245 The Closest Pair Problem
- XML
- hdu 5068 Harry And Math Teacher(BestCoder Round #14)
- SPOJ_AMR10I_Dividing Stones(DFS)
- visual Assist X 免费下载网址
- 飞鸽传书源码分析二消息机制
- codecomb 2098【stone】
- C++ const
- Ubuntu13.04(64bit)下用Wine安装百度云、360云、微云
- 对 熊大快跑Ver2.0.4 和支付的分析
- PAT(A) 1019
- 移动应用商城(MM)内购破解的关键点