这题很简单,把目标位置排序,把目标位置在当前位置前面的往前交换,每次都是贪心选择第一个满足这样要求的数字。
#include#include #include #include #include using namespace std;const int MAX=2005;int p1[MAX],p2[MAX],mp[MAX];int pos[MAX],goal[MAX];bool rip[MAX];vector >ans;int main(){ int n,counts,ans_counts,cost; while(scanf("%d",&n)!=EOF){ counts=0; ans.clear(); cost=0; for(int i=1;i<=n;i++) scanf("%d",&p1[i]); for(int i=1;i<=n;i++){ scanf("%d",&p2[i]); mp[p2[i]]=i; } for(int i=1;i<=n;i++){ if(p1[i]!=p2[i]){ pos[++counts]=i; goal[counts]=mp[p1[i]]; } }/* for(int i=1;i<=counts;i++) cout< <<" "; cout<