一、全排列
源代码:
#include<cstdio>
#include<algorithm> //包含【next_permutation】。
using namespace std;
int n,i[1001];
int main()
{
scanf("%d",&n); //输出1~n的全排列。
for (int a=1;a<=n;a++) //先输出其本身,并进行数组赋值。
{
printf("%d ",a);
i[a]=a;
}
printf("\n");
while (next_permutation(i+1,i+n+1)) //字典序输出数组标号为1~n的其他排列。
{
for (int a=1;a<=n;a++)
printf("%d ",i[a]);
printf("\n");
}
return 0;
}
二、优先队列
源代码:
#include<cstdio>
#include<queue> //包含【priority_queue】。
using namespace std;
int n,ans(0);
priority_queue < int,vector<int>,greater<int> > i; //此为由小到大顺序,由大到小为less。
int main()
{
scanf("%d",&n);
for (int a=1;a<=n;a++)
{
int t;
scanf("%d",&t);
i.push(t);
}
for (int a=1;a<n;a++)
{
int t=i.top(); //取顶端元素。
i.pop(); //去顶端元素。
t+=i.top();
i.pop();
ans+=t;
i.push(t); //增加元素。
}
printf("%d",ans);
return 0;
}