一看问题就像置换一样。……找到循环节,然后假设循环节的长度是l,如果只在循环中交换,每个数字必须至少计入一次成本,总共有2*(l-1)答案中包含了个数,显然除了每个数至少剩下一次l-最小的答案是最好的两次
然而,这可能不是这个循环中最好的。我们可以强行拉一个不在循环中的数字,所以我们必须让所有数字中最小的和循环中最小的交换,拉所有数字中最小的,然后让所有数字中最小的都包含在答案中l-两次,然后在这个数字和循环节中更换最小的
对每个循环节把这两种方法取min,加入答案
#include #include #include #include #include #include #include #include #include #include