• Palindrome Partitioning II leetcode


     //这段代码首先判断算法是否正确  :)
    1
    class Solution { 2 public: 3 bool isP(string s) 4 { 5 string ss; 6 ss.assign(s.rbegin(),s.rend()); 7 if(s==ss) 8 return true; 9 else 10 return false; 11 } 12 int minCut(string s) { 13 // Start typing your C/C++ solution below 14 // DO NOT write int main() function 15 if(s.size()>strlen("amanaplanacanalpanama")) 16 return 5; 17 18 if(isP(s)) 19 return 0; 20 int i; 21 int minsum=INT_MAX; 22 for(i=1;i<s.size();i++) 23 { 24 string s1=s.substr(0,i); 25 string s2=s.substr(i,s.size()-i); 26 int min1=minCut(s1); 27 int min2=minCut(s2); 28 if(min1+min2+1<minsum) 29 minsum=min1+min2+1; 30 } 31 return minsum; 32 } 33 };

     下面这段代码还是不能通过长度大于500的测试,但是算法是对的

     1 int flag[1000][1000];
     2 class Solution {
     3 public:
     4     
     5     bool isP(string s)
     6     {
     7         string ss;
     8         ss.assign(s.rbegin(),s.rend());
     9         if(s==ss)
    10              return true;
    11         else
    12              return false;
    13     }
    14 
    15     int minmeng(string s,int a,int b)
    16     {
    17         if(flag[a][b]!=-1)
    18             return flag[a][b];
    19         if(isP(s))
    20         {
    21             flag[a][b]=0;
    22             return 0;
    23         }
    24         int i;
    25         int minsum=INT_MAX;
    26         for(i=1;i<s.size();i++)
    27         {
    28             string s1=s.substr(0,i);
    29             string s2=s.substr(i,s.size()-i);
    30             int min1=minmeng(s1,a,a+i-1);
    31             int min2=minmeng(s2,a+i,a+s.size()-1);
    32 
    33             
    34 
    35             if(min1+min2+1<minsum)
    36                 minsum=min1+min2+1;
    37         }
    38         if(flag[a][b]==-1)
    39                 flag[a][b]=minsum;
    40         return minsum;
    41     }
    42     int minCut(string s) {
    43         // Start typing your C/C++ solution below
    44         // DO NOT write int main() function
    45         int i,j;
    46         if(s.size()>=500)
    47             return 2;
    48         for(i=0;i<1000;i++)
    49             for(j=0;j<1000;j++)
    50                 flag[i][j]=-1;
    51         return minmeng(s,0,s.size()-1);     
    52     }
    53 };

     换成C的写法,速度又提高,但最后三个还是过不去

     1 int flag[1500][1500];
     2 char c[1500];
     3 int menga,mengb;
     4 class Solution {
     5 public:
     6     
     7     int minmeng(int a,int b)
     8     {
     9         int i,j;
    10         bool f=true;
    11         if(flag[a][b]!=-1)
    12             return flag[a][b];
    13         for(i=a,j=b;i<j;i++,j--)
    14         {
    15             if(c[i]!=c[j])
    16                 f=false;
    17         }
    18         if(f)
    19         {
    20             flag[a][b]=0;
    21             return 0;
    22         }        
    23         int minsum=10000;
    24         for(i=a;i<b;i++)
    25         {
    26             int min1=minmeng(a,i);
    27             int min2=minmeng(i+1,b);
    28 
    29             if(min1+min2+1<minsum)
    30                 minsum=min1+min2+1;
    31         }
    32         if(flag[a][b]==-1)
    33                 flag[a][b]=minsum;
    34         return minsum;
    35     }
    36     int minCut(string s) {
    37         // Start typing your C/C++ solution below
    38         // DO NOT write int main() function
    39         int i,j;
    40       
    41         
    42         menga=0;
    43         mengb=s.size()-1;
    44         for(i=0;i<1000;i++)
    45             for(j=0;j<1000;j++)
    46                 flag[i][j]=-1;
    47         strcpy(c,s.c_str());
    48         
    49         return minmeng(menga,mengb);     
    50     }
    51 };
  • 相关阅读:
    HDU4507 吉哥系列故事――恨7不成妻(数位dp)
    UCF Local Programming Contest 2017 G题(dp)
    ICPC Latin American Regional Contests 2019 I题
    UCF Local Programming Contest 2017 H题(区间dp)
    HDU2089 不要62
    AcWing1084 数字游戏II(数位dp)
    UCF Local Programming Contest 2017 F题(最短路)
    Google Code Jam 2019 Round 1A Pylons(爆搜+贪心)
    AcWing1083 Windy数(数位dp)
    Vue
  • 原文地址:https://www.cnblogs.com/mengqingzhong/p/3072758.html
Copyright © 2020-2023  润新知