poj3187 穷竭搜索 <挑战程序设计大赛>
2018-01-30 22:07
302 查看
2018-1-30
直接用dfs求解即可,一开始的时候提交TLE,后来优化一下就OK了!
直接用dfs求解即可,一开始的时候提交TLE,后来优化一下就OK了!
#include<iostream> #include<cstring> using namespace std; const int N = 10; int x[N+1],y[N+1],z[N+1]; bool f[N+1]; int n,s,sum; int cal(){ int cnt=n; sum=0; for (int i=0;i<n;i++) z[i]=x[i]; while (cnt!=1){ for (int i=0;i<cnt-1;i++){ int t=z[i]+z[i+1]; z[i]=t; } cnt--; } sum=z[0]; return sum; } void dfs(int step){ if (step>n) return; if (step==n){ cal(); if (sum==s){ for (int i=0;i<n;i++){ y[i]=x[i]; } } return; } for (int i=1;i<=n;i++){ if (!f[i]){ if (i>y[step]) return; //在这里进行优化,因为我们要保证得到的字典序是最小的,所以要求的不能大于已知的对应的那个值 x[step]=i; f[i]=true; dfs(step+1); f[i]=false; } } } int main(){ while (cin>>n>>s){ memset(f,false,sizeof(f)); memset(y,0x3f,sizeof(y)); dfs(0); for (int i=0;i<n-1;i++){ cout<<y[i]<<" "; } cout<<y[n-1]<<endl; } return 0; }
相关文章推荐
- poj3050 穷竭搜索 <挑战程序设计竞赛>
- poj2456 二分搜索 <挑战程序设计竞赛>
- poj2376 区间贪心 <挑战程序设计竞赛>
- poj3279 反转 <挑战程序设计竞赛>
- poj3061 尺取法 <挑战程序设计竞赛>
- poj1328 区间贪心 <挑战程序设计竞赛>
- poj3176 基础的动态规划算法 <挑战程序设计竞赛>
- poj3190 区间贪心 <挑战程序设计竞赛>
- poj2385 基础的动态规划算法 <挑战程序设计竞赛>
- 挑战程序设计竞赛里面的部分题目<用java写的>
- 挑战程序设计竞赛 2.1 最基础的“穷竭搜索”
- poj2229 基础的动态规划算法 <挑战程序设计竞赛>
- poj3320 尺取法 <挑战程序设计竞赛>
- poj2393 其它贪心 <挑战程序设计竞赛>
- 寻找和留住人才:在华跨国企业的管理挑战<节选>
- 第八届河南省程序设计大赛-NYOJ-1236-挑战密室
- <Lua程序设计(第二版)>书摘-9
- “挑战<IT我最大> Windows7由你秀”微软把你当小丑耍
- 《挑战程序设计竞赛》2.1.3 穷竭搜索 POJ2718 POJ3187 POJ3050 AOJ0525
- 利用list<T>快速的模糊搜索