zoukankan      html  css  js  c++  java
  • lintcode

     1 class Solution {
     2 public:
     3     /*
     4      * @param A: A positive integer which has N digits, A is a string
     5      * @param l: Remove k digits
     6      * @return: A string
     7      */
     8      string dp[220][220];
     9      string inf;
    10     string DeleteDigits(string &A, int l) {
    11         // write your code here
    12         if(A.size() == 0) return "";
    13         if(l == 0) return A;
    14         int len = A.length() - l;
    15         for(int i = 0; i < A.size(); ++i){
    16                 dp[i][0] = "";
    17                 inf = inf + "9";
    18         }
    19         for(int i = 0; i < A.size(); ++i){
    20                 for(int j = 0; j < A.size(); ++j){
    21                         dp[i][j] = inf;
    22                 }
    23         }
    24         vector<string> vec;
    25         for(int i = 0; i < A.length(); ++i){
    26                 stringstream ss;
    27                 ss << (A[i] - '0');
    28                 vec.push_back(ss.str());
    29         }
    30         dp[0][1] = A.substr(0,1);
    31         for(int i = 1; i < vec.size(); ++i){
    32                         for(int k = 1; k <= i + 1 && k <= len; ++k){
    33                                 for(int j = 0; j < i; ++j){
    34                                         if(k <= j + 1)
    35                                         dp[i][k] = min(dp[j][k - 1] + vec[i], min(dp[i][k], dp[j][k]));
    36                                         else dp[i][k] = min(dp[j][k - 1] + vec[i], dp[i][k]);
    37 
    38                                         if(k == 1) dp[i][k] = min(dp[i][k], vec[i]);
    39                                 }
    40                                // cout << dp[2][1] << endl;
    41                         }
    42 
    43         }
    44         int len1 = dp[vec.size() - 1][len].length();
    45         for(int i = 0; i < len1; ++i){
    46                 if(dp[vec.size() - 1][len][i] != '0'){
    47                         dp[vec.size() - 1][len] = dp[vec.size() - 1][len].substr(i,len1-i);
    48                         break;
    49                 }
    50         }
    51         return dp[vec.size() - 1][len];
    52 
    53     }
    54 };

    dp[i][j]代表以i结尾,长度为j的最小的字串 因为这个数字会很长 所以不能用数字来dp,必须用字符串来dp 注意一下因为是字符串 所以要去掉前导零

  • 相关阅读:
    MVC模板页
    MVC Razor 语法(转)
    Code First 更新数据库结构
    mvc5 HTML Helper
    mvc5经典教程再补充。。
    mvc5入门,经典教程。。
    关于“以管理员身份运行”。。。
    windows8无脑式双系统安装教程(转)
    vs2010 无法连接到asp.net development server
    VMware虚拟机下安装RedHat Linux 9.0
  • 原文地址:https://www.cnblogs.com/GeniusYang/p/7609959.html
Copyright © 2011-2022 走看看