首页 > 其他 > 详细

Topcoder Srm627 DIV 2

时间:2014-07-14 10:00:40      阅读:300      评论:0      收藏:0      [点我收藏+]

A,B:很水,注意边界,话说HACK都是这些原因。

C:

 R[I][J]:表示反转I-J能改变冒泡排序的次数;

   DP方程:dp[i][k]=max(dp[j][k],dp[j][k-1]+dp[j][i])  (0<=j<i) 

              最后枚举,具体看代码

#include<stdio.h>
#include<iostream>
#include<vector>
#include<algorithm>
#include<cmath>
#include<string.h>

using namespace  std;
class BubbleSortWithReversals{
public:
     int bs(vector<int> a)
     {
        int n=a.size(),ans=0;

        while (n--){
            for (int i=0;i<a.size()-1;i++)
            if (a[i]>a[i+1]) 
            {
               swap(a[i],a[i+1]);
               ans++;    
            }
         }
         return ans;
     }
     
     int getMinSwaps(vector<int> A,int K){
        int n=A.size();
        int dp[55][55]={0};
        int r[55][55]={0};
        
        for (int i=0;i<n;i++)
            for (int j=i+1;j<n;j++){
            r[i][j]=bs(A);
            reverse(A.begin()+i,A.begin()+j+1);
            r[i][j]-=bs(A);
            reverse(A.begin()+i,A.begin()+j+1);
          }
        
         for (int i=0;i<n;i++){
            for (int k=1;k<=K;k++)
                for (int j=0;j<i;j++)
                {
                dp[i][k]=max(dp[i][k],dp[j][k]);
                dp[i][k]=max(dp[i][k],dp[j][k-1]+r[j][i]);
            }
         }
        
         int ans=0;
         for (int i=0;i<=K;i++)
         ans=max(ans,dp[n-1][i]);
         return bs(A)-ans;
     }
};

  

Topcoder Srm627 DIV 2,布布扣,bubuko.com

Topcoder Srm627 DIV 2

原文:http://www.cnblogs.com/forgot93/p/3837586.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!