POJ 3187 Backward Digit Sums
2016-03-30 08:44
267 查看
暴力DFS+验证。
验证如果是暴力检验可能复杂度会太高,事实上可以o(1)进行,这个可以o(n*n)dp预处理。
验证如果是暴力检验可能复杂度会太高,事实上可以o(1)进行,这个可以o(n*n)dp预处理。
#include<cstdio> #include<cstring> #include<cmath> #include<algorithm> using namespace std; const int maxn=20; bool flag[maxn]; bool r; int a[maxn]; int n,sum; int mul[15][15]; bool check(int s) { if(s==sum) return 1; return 0; } void dfs(int deep,int tot) { if(deep==n-1) { if(check(tot)) { r=1; for(int i=0;i<=deep;i++) { printf("%d",a[i]); if(i<deep) printf(" "); else printf("\n"); } } return ; } for(int i=1;i<=n;i++) { if(flag[i]==0) { flag[i]=1; a[deep+1]=i; dfs(deep+1,tot+a[deep+1]*mul [deep+1+1]); if(r==1) return; flag[i]=0; } } } void init() { memset(mul,0,sizeof mul); mul[1][1]=1; for(int i=2;i<=10;i++) { for(int j=1;j<=10;j++) mul[i][j]=mul[i-1][j]; for(int j=2;j<=10+1;j++) mul[i][j]=mul[i][j]+mul[i-1][j-1]; } } int main() { init(); while(~scanf("%d%d",&n,&sum)) { r=0; memset(flag,0,sizeof flag); for(int i=1;i<=n;i++) { flag[i]=1; a[0]=i; dfs(0,a[0]*mul [0+1]); flag[i]=0; } } return 0; }
相关文章推荐
- ext2文件系统
- 计算机体系结构与参考模型
- *Android面试实战总结2
- algrothm_9*9
- hibernate 一级缓存、二级缓存和查询缓存(一)
- 分布式文件系统:原理、问题与方法(转)
- Apache-APR配置方案
- 【BZOJ1798】[Ahoi2009]Seq 维护序列seq 【线段树】
- Java高性能计算若干内容
- 年龄判断程序
- algrothm_输出异样*形
- PhoneGap的第一天
- 判断素数方法
- 如何做好数据模型设计及模型管理?
- shell 之基本的运算指令
- android 多条件筛选菜单效果
- 如何成为真正的数据架构师
- 云计算:利用叶子云桌面虚拟化管理平台搭建企业的桌面云,简介(一)
- ownCloud Pi 设备将运行在 Snappy Ubuntu Core 16.04 LTS 及树莓派3上
- OLAP系统功能小析