全排列
2016-05-20 15:55
218 查看
全排列涉及的范围很多。先讲一讲全排列的定义。【定义】从n个不同元素中n个元素,按照一定的顺序排列起来,像这样所有的排列情况叫全排列。
如1,2,3的全排列是: 123 132 213 231 312 321全排列函数f(n)=n!(指n的阶乘:1*2*3*……*n)下面来说一说关于全排列的算法。【经典题目】1,给定一组数和这组数的一种全排列,输出下一组数的全排列。
【实现】voidnext(){intx,y,j,bo=0;for(x=n;x>=1;x--)if(a[x]>a[x-1])break;y=x;for(j=x;j<=n;j++)if(a[j]==a[x-1]+1){bo=1;break;}if(bo)y=j;swap(a[x-1],a[y]);intb[101];for(intk=x;k<=n;k++)b[k]=a[n-(k-x)];for(intk=x;k<=n;k++)a[k]=b[k];}2,给定一个全排列,输出它是第几个。【题意分析】这一道题就相对简单一些。
还是举刚才的例子:13542
#include<cstdio>usingnamespacestd;intn;inta[101];intjs[101];intt,sum,ans=0;intmain(){scanf("%d",&n);for(inti=1;i<=n;i++)scanf("%d",&a[i]);js[1]=1;for(inti=2;i<=n;i++)js[i]=js[i-1]*i;for(inti=1;i<=n;i++){t=n-i;sum=0;for(intj=i;j<=n;j++)if(a[j]<a[i])sum++;ans+=sum*js[t];}printf("%d",ans+1);return0;}未完待续……
相关文章推荐
- 2016.3.20的解题报告
- 【编程技巧】——加快cin的输入速度
- 【编程技巧】——对拍
- RMQ
- 【编程技巧】——计算时间
- 2016GDOI市选拔赛解题报告
- 【转载】胜者树
- 【转载】计算几何中的精度问题(转)
- USACO 2016 open Bronze 解题报告
- SPFA
- USACO 2016 open Silver 解题报告
- 2016GDOI的总结
- 六十一 Web开发 使用Web框架
- js判断 微信浏览器 或者 QQ内置浏览器
- redis
- jquery.nicescroll.js可全屏可改滚动条颜色的滚动条插件-推荐
- Android 中的 Service 全面总结
- android studio关联svn后没有出现提交和更新的两个按钮
- 键盘只能输入数字(或其它特定的规定字符)
- matlab读取.off文件代码