隨筆 - 147  文章 - 71  trackbacks - 0
          <2009年12月>
          293012345
          6789101112
          13141516171819
          20212223242526
          272829303112
          3456789

          常用鏈接

          留言簿(1)

          隨筆分類(146)

          隨筆檔案(147)

          文章分類(28)

          文章檔案(28)

          喜歡的Blog

          搜索

          •  

          最新評論

          閱讀排行榜

          評論排行榜

          http://acm.fjnu.edu.cn/show?problem_id=1772

          動態規劃:假設前n-1本的取書方案已經解決,單獨考慮第n本的取舍,如果保留第n本增加了已知的不整齊度,則取掉第n本。
          首先要按高度進行排序。
          dp[i][j] //以i結尾,已取好j本書
          初始化:
          dp[1][0]=0;
          for(i=2;i<=n;i++) dp[i][0]=dp[i-1][0]+Math.abs(w[i]-w[i-1]);
          方程:
          dp[i][j]=min{dp[i-p-1][j-p]+abs(w[i]-w[i-p-1])},0<=p<=j,0<=j<=k
          ans=min(dp[n-i][k-i)]) ,0<=i<=k

          import java.util.*;
          import java.io.*;
          import java.math.*;

          public class ACM_1772{
              
              
          public static void main(String rgs[]) throws Exception
              
          {
                  BufferedReader stdin 
          = new BufferedReader(new InputStreamReader(System.in));    
                  String line 
          = stdin.readLine();
                  StringTokenizer st 
          = new StringTokenizer(line);
                  
          int n = Integer.parseInt(st.nextToken()); 
                  
          int k = Integer.parseInt(st.nextToken());
                  
          int i,j,k1,p,tmp;
                  
          int[] h = new int[201];
                  
          int[] w = new int[201];
                  
          for(i=1;i<=n;i++){
                      line 
          = stdin.readLine();
                      st 
          = new StringTokenizer(line);
                      h[i] 
          = Integer.parseInt(st.nextToken());
                      w[i] 
          = Integer.parseInt(st.nextToken());
                  }
                  
                  
          for(i=1;i<n;i++){
                      k1
          =i;
                      
          for(j=i+1;j<=n;j++){
                          
          if(h[k1]>h[j])
                              k1
          =j;
                      }

                      
          if(k1!=i){
                          tmp
          =h[k1];
                          h[k1]
          =h[i];
                          h[i]
          =tmp;
                          tmp
          =w[k1];
                          w[k1]
          =w[i];
                          w[i]
          =tmp;
                      }

                  }
                  
                  
          int[][] dp =new int[201][201];
                  dp[
          1][0]=0;
                  
          for(i=2;i<=n;i++)
                      dp[i][
          0]=dp[i-1][0]+Math.abs(w[i]-w[i-1]);        
                  
          for(i=1;i<=n;i++){
                      
          for(j=1;j<=k;j++){
                          
          if(j>=i)
                              
          break;                    
                            dp[i][j]
          =0xffffff;
                            
          if(j==i-1)
                                dp[i][j]
          =0;
                            
          else{
                                
          for(p=0;p<=j;p++){
                                   tmp
          =dp[i-p-1][j-p];
                                   tmp
          =tmp+Math.abs(w[i-p-1]-w[i]);
                                   
          if(tmp<dp[i][j])
                                      dp[i][j]
          =tmp;
                              }

                          }

                      }

                  }
                  
                  
          int min=dp[n][k];
                  
          for(i=1;i<=k;i++){
                        
          if(dp[n-i][k-i]<min)
                            min
          =dp[n-i][k-i];
                    }

                  System.out.println(min);      
              }

          }
          posted on 2009-12-25 20:22 飛翔天使 閱讀(275) 評論(0)  編輯  收藏 所屬分類: ACM
          主站蜘蛛池模板: 成都市| 聂拉木县| 乌鲁木齐市| 长泰县| 宿迁市| 壶关县| 崇左市| 城固县| 陇川县| 察隅县| 云安县| 桐乡市| 怀安县| 龙门县| 田东县| 五原县| 中江县| 高青县| 博客| 兴安县| 香港| 淳安县| 吉木萨尔县| 南昌市| 盐源县| 陆河县| 丹寨县| 西盟| 卢氏县| 贞丰县| 靖边县| 云龙县| 陕西省| 通化县| 海林市| 南城县| 天台县| 南和县| 稷山县| 唐山市| 金湖县|