POJ 1833 排列
2013-10-01 11:12
316 查看
题目是中文的,相信题意都懂,一般书上介绍使用STL来做,不过也有其他的方法,可能会更习惯一些吧!!
我采用的是排列生成里面的邻位互换法,从后面搜找到满足q[i-1] < q[i] 交换二者的位置,再i点后面的排序,就可以了。
AC代码:
路途中。。。
我采用的是排列生成里面的邻位互换法,从后面搜找到满足q[i-1] < q[i] 交换二者的位置,再i点后面的排序,就可以了。
AC代码:
#include<iostream> #include<cstring> #include<cstdio> #include<algorithm> using namespace std; int q[2008]; int main() { int t,n,i,j,ant,ans,minn,k; scanf("%d",&t); while(t--) { scanf("%d%d",&n,&k); for(i=1;i<=n;i++) scanf("%d",&q[i]); while(k--) { ant=0; for(i=n;i>1;i--) { if(q[i-1] < q[i]) { ant=1;break; } } if(ant == 0) //从最后一个到第一个。 { for(i=1;i<=n;i++) q[i]=i; continue; } minn=10000; for(j=i;j<=n;j++) { if(q[j]-q[i-1]>0 && minn >q[j]-q[i-1]) { minn=q[j]-q[i-1]; ans=j; } } ant=q[i-1]; q[i-1]=q[ans]; q[ans]=ant; sort(q+i,q+n+1); } for(i=1;i<n;i++) printf("%d ",q[i]); printf("%d\n",q ); } return 0; }
路途中。。。
相关文章推荐
- POJ 1833 生成排列
- POJ 1833 排列(计数DFS)
- POJ 1833 排列 解题报告
- poj 1833 排列
- POJ-1833 排列-字典序
- POJ 1833 排列
- POJ 1833 排列(字典序全排列、next_permutation()、copy+流迭代器)
- POJ 1833 排列(全排列 STL)
- POJ 1833 排列
- POJ1833__排列
- 排列 POJ - 1833
- Poj 1833 排列
- (DS1.5.9)POJ 1833 排列(生成当前排列的下一排列)
- poj 1833 排列
- POJ 1833 生成排列
- STL(next_permutation)poj 1833:排列
- poj 1833 排列 next_permutation
- POJ 1833 排列
- poj 1256/1732/1833/1146 C++stl全排列
- POJ 1833 生成排列