wikioi2845 排序的代价 Polay定理
来源:互联网 发布:mac版lol官网 编辑:程序博客网 时间:2024/05/17 09:12
群论题,涨姿势啊涨姿势,牛掰的群论。先确定循环有几个,再按照遍历找出循环,记录每个循环的最小值和所有数的和。
最后判断每个循环节所用的最小代价时有两种情况:
第一种是在当前循环里把最小数作为调动的工具。
第二种是把整个数列里最小的数字和循环里最小数字交换,把数列里最小的数字作为工具,最后两个数要换回来。
#include <algorithm>#include <iostream>#include <cstring>#include <cstdio>using namespace std;int n;int mino;bool labelperm[1010];struct node{ int pos,w;}box[1100];struct loop{ int mina,sum,num,head;}perm[1100];int findpos(){ for(int i=0;i<n;i++) { box[i].pos=0; for(int j=0;j<n;j++) { if(box[i].w>box[j].w) { box[i].pos++; } } }}void minn(){ mino=0x3f3f3f3f; for(int i=0;i<n;i++) { mino=min(mino,box[i].w); }}int getans(int k){ if(perm[k].num==1) return 0; int r1=perm[k].sum+(perm[k].num-2)*perm[k].mina; int r2=perm[k].sum+(perm[k].num-1)*mino-perm[k].mina+2*(mino+perm[k].mina); return min(r1,r2);}int countg(){ int sum=0; for(int i=0;i<n;i++) labelperm[i]=true; for(int i=0;i<n;i++) { if(labelperm[i]) { int k=0; for(k=i;box[k].pos!=i;k=box[k].pos) { labelperm[k]=false; } labelperm[k]=false; labelperm[i]=true; } } for(int i=0;i<n;i++) if(labelperm[i]) { perm[sum].head=i; sum++; } for(int i=0;i<sum;i++) { perm[i].mina=0x3f3f3f3f; perm[i].sum=perm[i].num=0; for(int j=perm[i].head;j!=perm[i].head || perm[i].num==0 ;j=box[j].pos) { perm[i].mina=min(perm[i].mina,box[j].w); perm[i].sum+=box[j].w; perm[i].num++; } } return sum;}int main(){ int tot=0;while(scanf("%d",&n)!=EOF){tot++;for(int i=0;i<n;i++){scanf("%d",&box[i].w);}findpos();int permnum=countg();minn();int ans=0;for(int i=0;i<permnum;i++){ans+=getans(i);}if(ans==0){return 0;}printf("Case %d: %d\n",tot,ans);} return 0;}
0 0
- wikioi2845 排序的代价 Polay定理
- polay定理
- Polay定理总结
- polay定理总结
- poj2409Let it Bead Polay定理
- 统计排序的代价
- codevs2845 排序的代价
- 排序的代价
- CODEVS 2845 排序的代价
- Who's Aunt Zhang(hdu4633,polay定理)
- 【POJ 2409】Let it Bead(Polay 定理)
- 组合数学 polay定理 hud 2409 Let it Bead
- HDU-5868-Different Circle Permutation-Burnside定理和polay计数
- 最快的排序方法,以空间耗费为代价!!
- ACM: polay定理 数论题 poj 1286 …
- polay计数
- polay计数
- 三无的代价
- 【算法题集锦之一】--给定只能排序5个数的方法,找出25个数中的前四个
- 时间管理方法
- 二叉树三种遍历非递归算法
- 黑马程序员_Java中的泛型机制
- Java学习总结16——Java Web应用性能优化总结
- wikioi2845 排序的代价 Polay定理
- 在用Kivy开发Python手机游戏时通过Plyer扩展访问Android传感器
- Android Contentprovider学习之 实例总结
- 【剑指offer】Q18:树的子结构
- Bracket 使用指南
- 一个简单有效的手写识别引擎
- 深入Java集合学习系列:HashMap的实现原理
- java环境变量搭建
- 多态