POJ-3187 Backward Digit Sums
来源:互联网 发布:淘宝美工多少钱一个月 编辑:程序博客网 时间:2024/05/20 21:19
题目:http://poj.org/problem?id=3187
题意:求出 1~N 的数的组合 按照题目的规律得到最后的值等于题目的值的 组合
思路:使用 dfs 或者是 next_permutation
记住两种排列的顺序都是从小到大的, 所以一旦找到答案便是最小的排列,便可以直接输出。
CODE:
#include <iostream>#include<stdio.h>#include<algorithm>const int inf=0xffffff;using namespace std;int num[20],vis[20],n[20];int N,S;int ok;void work(){ int nn[20]; for(int i=0;i<N;i++) { nn[i]=n[i]; } for(int i=N;i>=0;i--) { for(int j=0;j<i-1;j++) nn[j]=nn[j]+nn[j+1]; } if(nn[0]==S) { ok=1; printf("%d",n[0]); for(int i=1;i<N;i++) printf(" %d",n[i]); printf("\n"); }}void dfs(int i){ if(ok==1) return ; if(i==N) { work(); return ; } for(int ii=0;ii<N;ii++) { if(vis[ii]) continue; vis[ii]=1; n[i]=num[ii]; dfs(i+1); vis[ii]=0; } return ;}int main(){ while(~scanf("%d %d",&N,&S)) { ok=0; for(int i=0;i<N;i++) num[i]=i+1; dfs(0); } return 0;}
#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>#include<cmath>const int inf=0xffffff;using namespace std;int num[20],ans[20],n[20];int N,S;int work(){ for(int j=N;j>=0;j--) { for(int i=0;i<j-1;i++) { n[i]=n[i]+n[i+1]; //printf("%d\n",n[i]); } } return n[0];}int main(){ while(~scanf("%d%d",&N,&S)) { for(int i=0;i<N;i++) num[i]=i+1; fill(ans,ans+N,inf); do { for(int i=0;i<N;i++) n[i]=num[i]; if(work()==S) { for(int i=0;i<N;i++) { if(num[i]>ans[i]) break; if(num[i]<ans[i]) { for(int i=0;i<N;i++) ans[i]=num[i]; break; } } } }while(next_permutation(num,num+N)); printf("%d",ans[0]); for(int i=1;i<N;i++) { printf(" %d",ans[i]); } printf("\n"); } return 0;}
0 0
- POJ 3187 Backward Digit Sums
- POJ 3187 Backward Digit Sums
- POJ 3187 Backward Digit Sums
- poj 3187 Backward Digit Sums
- POJ-3187-Backward Digit Sums
- poj 3187 Backward Digit Sums
- POJ-3187-Backward Digit Sums
- poj 3187 : Backward Digit Sums
- poj 3187 Backward Digit Sums
- POJ 3187 Backward Digit Sums
- POJ 3187 Backward Digit Sums
- POJ-3187 Backward Digit Sums
- POJ 3187 Backward Digit Sums
- POJ 3187 Backward Digit Sums
- poj 3187 Backward Digit Sums
- poj 3187 Backward Digit Sums
- POJ 3187 Backward Digit Sums
- Backward Digit Sums(POJ-3187)
- java.lang.ClassNotFoundException: com.mysql.jdbc.Driver
- Linux下永久修改MAC地址和ifconfig命令总结
- 马踏棋盘
- poj2479 && poj2593Maximum sum(求两个不相交最大字段的和)
- 子进程继承父进程中的锁
- POJ-3187 Backward Digit Sums
- cocos2d html5 cc.action调用函数
- 初学C语言 C语言的认识
- C++链接顺序问题
- as3.0遮罩导致的MouseEvent被遮盖的问题
- keep looking, do not settle
- bzoj1754 [Usaco2005 qua]Bull Math
- Android 上拉下拉刷新,支持ListView,GridView,ScrollView
- 添加静态路由 删除路由