diff --git "a/SugarChl/xuanzhuanSort/153. \345\257\273\346\211\276\346\227\213\350\275\254\346\216\222\345\272\217\346\225\260\347\273\204\344\270\255\347\232\204\346\234\200\345\260\217\345\200\274_1.c" "b/SugarChl/153. \345\257\273\346\211\276\346\227\213\350\275\254\346\216\222\345\272\217\346\225\260\347\273\204\344\270\255\347\232\204\346\234\200\345\260\217\345\200\274/153. \345\257\273\346\211\276\346\227\213\350\275\254\346\216\222\345\272\217\346\225\260\347\273\204\344\270\255\347\232\204\346\234\200\345\260\217\345\200\274_1.c" similarity index 100% rename from "SugarChl/xuanzhuanSort/153. \345\257\273\346\211\276\346\227\213\350\275\254\346\216\222\345\272\217\346\225\260\347\273\204\344\270\255\347\232\204\346\234\200\345\260\217\345\200\274_1.c" rename to "SugarChl/153. \345\257\273\346\211\276\346\227\213\350\275\254\346\216\222\345\272\217\346\225\260\347\273\204\344\270\255\347\232\204\346\234\200\345\260\217\345\200\274/153. \345\257\273\346\211\276\346\227\213\350\275\254\346\216\222\345\272\217\346\225\260\347\273\204\344\270\255\347\232\204\346\234\200\345\260\217\345\200\274_1.c" diff --git "a/SugarChl/xuanzhuanSort/153. \345\257\273\346\211\276\346\227\213\350\275\254\346\216\222\345\272\217\346\225\260\347\273\204\344\270\255\347\232\204\346\234\200\345\260\217\345\200\274_2.c" "b/SugarChl/153. \345\257\273\346\211\276\346\227\213\350\275\254\346\216\222\345\272\217\346\225\260\347\273\204\344\270\255\347\232\204\346\234\200\345\260\217\345\200\274/153. \345\257\273\346\211\276\346\227\213\350\275\254\346\216\222\345\272\217\346\225\260\347\273\204\344\270\255\347\232\204\346\234\200\345\260\217\345\200\274_2.c" similarity index 100% rename from "SugarChl/xuanzhuanSort/153. \345\257\273\346\211\276\346\227\213\350\275\254\346\216\222\345\272\217\346\225\260\347\273\204\344\270\255\347\232\204\346\234\200\345\260\217\345\200\274_2.c" rename to "SugarChl/153. \345\257\273\346\211\276\346\227\213\350\275\254\346\216\222\345\272\217\346\225\260\347\273\204\344\270\255\347\232\204\346\234\200\345\260\217\345\200\274/153. \345\257\273\346\211\276\346\227\213\350\275\254\346\216\222\345\272\217\346\225\260\347\273\204\344\270\255\347\232\204\346\234\200\345\260\217\345\200\274_2.c" diff --git "a/SugarChl/153. \345\257\273\346\211\276\346\227\213\350\275\254\346\216\222\345\272\217\346\225\260\347\273\204\344\270\255\347\232\204\346\234\200\345\260\217\345\200\274/readme.md" "b/SugarChl/153. \345\257\273\346\211\276\346\227\213\350\275\254\346\216\222\345\272\217\346\225\260\347\273\204\344\270\255\347\232\204\346\234\200\345\260\217\345\200\274/readme.md" new file mode 100644 index 0000000..25a9059 --- /dev/null +++ "b/SugarChl/153. \345\257\273\346\211\276\346\227\213\350\275\254\346\216\222\345\272\217\346\225\260\347\273\204\344\270\255\347\232\204\346\234\200\345\260\217\345\200\274/readme.md" @@ -0,0 +1,6 @@ +寻找旋转排序数组中的最小值 + +153. 寻找旋转排序数组中的最小值_1.c 是完全自己写的代码 + +153. 寻找旋转排序数组中的最小值_2.c 是网络上找到的代码 + diff --git "a/SugarChl/221. \346\234\200\345\244\247\346\255\243\346\226\271\345\275\242/221.\346\234\200\345\244\247\346\255\243\346\226\271\345\275\242.c" "b/SugarChl/221. \346\234\200\345\244\247\346\255\243\346\226\271\345\275\242/221.\346\234\200\345\244\247\346\255\243\346\226\271\345\275\242.c" new file mode 100644 index 0000000..109fa4c --- /dev/null +++ "b/SugarChl/221. \346\234\200\345\244\247\346\255\243\346\226\271\345\275\242/221.\346\234\200\345\244\247\346\255\243\346\226\271\345\275\242.c" @@ -0,0 +1,38 @@ +int min(int a,int b) +{ + if(a>b) + return b; + else + return a; +} + + +int maximalSquare(char** matrix, int matrixRowSize, int matrixColSize) { + int row,col; + int max=0; + int m[1000][1000]; + + for(row=0;rowmax) + max=m[row][col]; + } + } + return max*max; +} diff --git "a/SugarChl/221. \346\234\200\345\244\247\346\255\243\346\226\271\345\275\242/readme.md" "b/SugarChl/221. \346\234\200\345\244\247\346\255\243\346\226\271\345\275\242/readme.md" new file mode 100644 index 0000000..d63a9c5 --- /dev/null +++ "b/SugarChl/221. \346\234\200\345\244\247\346\255\243\346\226\271\345\275\242/readme.md" @@ -0,0 +1,4 @@ +# 解题思路 + + 参考了网络上的答案, + 使用动态规划的方法。 \ No newline at end of file diff --git "a/SugarChl/5. \346\234\200\351\225\277\345\233\236\346\226\207\345\255\220\344\270\262/5.\346\234\200\351\225\277\345\233\236\346\226\207\345\255\220\344\270\262.c" "b/SugarChl/5. \346\234\200\351\225\277\345\233\236\346\226\207\345\255\220\344\270\262/5.\346\234\200\351\225\277\345\233\236\346\226\207\345\255\220\344\270\262.c" new file mode 100644 index 0000000..6e0349c --- /dev/null +++ "b/SugarChl/5. \346\234\200\351\225\277\345\233\236\346\226\207\345\255\220\344\270\262/5.\346\234\200\351\225\277\345\233\236\346\226\207\345\255\220\344\270\262.c" @@ -0,0 +1,59 @@ +#include +char* longestPalindrome(char* s) { + int len = strlen(s); + int n = 2*len-1; + int i; + int max=0; + int left = 0; + int right = 0; + int L=0,R=0; + for(i=0;i=0&&Rmax) + { + max=R-L; + right=R; + left=L; + } + } + else if(i%2==1) + { + L=(i-1)/2; + R=(i+1)/2; + while(L>=0&&Rmax) + { + max=R-L; + right=R; + left=L; + } + } + } + char *p=malloc(1000*sizeof('x')); + int k=0; + for(i=left;i<=right;i++) + { + //printf("%c",s[i]); + p[k++]=s[i]; + } + p[k]='\0'; + return p; +} \ No newline at end of file diff --git "a/SugarChl/5. \346\234\200\351\225\277\345\233\236\346\226\207\345\255\220\344\270\262/readme.md" "b/SugarChl/5. \346\234\200\351\225\277\345\233\236\346\226\207\345\255\220\344\270\262/readme.md" new file mode 100644 index 0000000..d63a9c5 --- /dev/null +++ "b/SugarChl/5. \346\234\200\351\225\277\345\233\236\346\226\207\345\255\220\344\270\262/readme.md" @@ -0,0 +1,4 @@ +# 解题思路 + + 参考了网络上的答案, + 使用动态规划的方法。 \ No newline at end of file diff --git a/SugarChl/readme.md b/SugarChl/readme.md index ba27de3..7194579 100644 --- a/SugarChl/readme.md +++ b/SugarChl/readme.md @@ -8,3 +8,6 @@ 153. 寻找旋转排序数组中的最小值_2.c 是网络上找到的代码 +5.最长回文子串 + +221.最大正方形 \ No newline at end of file diff --git "a/SugarChl/\345\212\250\346\200\201\350\247\204\345\210\222/221. \346\234\200\345\244\247\346\255\243\346\226\271\345\275\242/221.\346\234\200\345\244\247\346\255\243\346\226\271\345\275\242.c" "b/SugarChl/\345\212\250\346\200\201\350\247\204\345\210\222/221. \346\234\200\345\244\247\346\255\243\346\226\271\345\275\242/221.\346\234\200\345\244\247\346\255\243\346\226\271\345\275\242.c" new file mode 100644 index 0000000..109fa4c --- /dev/null +++ "b/SugarChl/\345\212\250\346\200\201\350\247\204\345\210\222/221. \346\234\200\345\244\247\346\255\243\346\226\271\345\275\242/221.\346\234\200\345\244\247\346\255\243\346\226\271\345\275\242.c" @@ -0,0 +1,38 @@ +int min(int a,int b) +{ + if(a>b) + return b; + else + return a; +} + + +int maximalSquare(char** matrix, int matrixRowSize, int matrixColSize) { + int row,col; + int max=0; + int m[1000][1000]; + + for(row=0;rowmax) + max=m[row][col]; + } + } + return max*max; +} diff --git "a/SugarChl/\345\212\250\346\200\201\350\247\204\345\210\222/221. \346\234\200\345\244\247\346\255\243\346\226\271\345\275\242/readme.md" "b/SugarChl/\345\212\250\346\200\201\350\247\204\345\210\222/221. \346\234\200\345\244\247\346\255\243\346\226\271\345\275\242/readme.md" new file mode 100644 index 0000000..d63a9c5 --- /dev/null +++ "b/SugarChl/\345\212\250\346\200\201\350\247\204\345\210\222/221. \346\234\200\345\244\247\346\255\243\346\226\271\345\275\242/readme.md" @@ -0,0 +1,4 @@ +# 解题思路 + + 参考了网络上的答案, + 使用动态规划的方法。 \ No newline at end of file diff --git "a/SugarChl/\345\212\250\346\200\201\350\247\204\345\210\222/5. \346\234\200\351\225\277\345\233\236\346\226\207\345\255\220\344\270\262/5.\346\234\200\351\225\277\345\233\236\346\226\207\345\255\220\344\270\262.c" "b/SugarChl/\345\212\250\346\200\201\350\247\204\345\210\222/5. \346\234\200\351\225\277\345\233\236\346\226\207\345\255\220\344\270\262/5.\346\234\200\351\225\277\345\233\236\346\226\207\345\255\220\344\270\262.c" new file mode 100644 index 0000000..6e0349c --- /dev/null +++ "b/SugarChl/\345\212\250\346\200\201\350\247\204\345\210\222/5. \346\234\200\351\225\277\345\233\236\346\226\207\345\255\220\344\270\262/5.\346\234\200\351\225\277\345\233\236\346\226\207\345\255\220\344\270\262.c" @@ -0,0 +1,59 @@ +#include +char* longestPalindrome(char* s) { + int len = strlen(s); + int n = 2*len-1; + int i; + int max=0; + int left = 0; + int right = 0; + int L=0,R=0; + for(i=0;i=0&&Rmax) + { + max=R-L; + right=R; + left=L; + } + } + else if(i%2==1) + { + L=(i-1)/2; + R=(i+1)/2; + while(L>=0&&Rmax) + { + max=R-L; + right=R; + left=L; + } + } + } + char *p=malloc(1000*sizeof('x')); + int k=0; + for(i=left;i<=right;i++) + { + //printf("%c",s[i]); + p[k++]=s[i]; + } + p[k]='\0'; + return p; +} \ No newline at end of file diff --git "a/SugarChl/\345\212\250\346\200\201\350\247\204\345\210\222/5. \346\234\200\351\225\277\345\233\236\346\226\207\345\255\220\344\270\262/readme.md" "b/SugarChl/\345\212\250\346\200\201\350\247\204\345\210\222/5. \346\234\200\351\225\277\345\233\236\346\226\207\345\255\220\344\270\262/readme.md" new file mode 100644 index 0000000..d63a9c5 --- /dev/null +++ "b/SugarChl/\345\212\250\346\200\201\350\247\204\345\210\222/5. \346\234\200\351\225\277\345\233\236\346\226\207\345\255\220\344\270\262/readme.md" @@ -0,0 +1,4 @@ +# 解题思路 + + 参考了网络上的答案, + 使用动态规划的方法。 \ No newline at end of file diff --git "a/SugarChl/\345\212\250\346\200\201\350\247\204\345\210\222/readme.md" "b/SugarChl/\345\212\250\346\200\201\350\247\204\345\210\222/readme.md" new file mode 100644 index 0000000..a454c19 --- /dev/null +++ "b/SugarChl/\345\212\250\346\200\201\350\247\204\345\210\222/readme.md" @@ -0,0 +1,29 @@ +# 动态规划 个人归纳 + +做了一些题目之后,就无法忍受暴力的方法来解题了。 +针对可以使用动态规划的题目,做一些总结,请各位大佬指正~ + + +当一个大规模问题可以被分解为小规模子问题,那么一般来说,这个问题就可以使用动态规划来求解。 +要使用动态规划,那么就要构建状态转移方程。 +“状态转移方程,是动态规划中本阶段的状态往往是上一阶段状态和上一阶段决策的结果”(来自百度百科) +动态规划,是要将问题分解。 +那么,问题与子问题之间该怎么连接呢。 +这就要构建状态转移方程。 + + +## 221.最大正方形的问题。 +>选取矩阵中的一个点。x[i][j] +>x点是否是最大正方形的右下角的点 与x[i-1][j] x[i][j-1] x[i-1][j-1]这三个点有关 +>①若DP[i-1][j],DP[i][j-1],DP[i-1][j-1]三者中存在0值,则DP[i][j]一定为0; +>②若DP[i-1][j],DP[i][j-1],DP[i-1][j-1]均不为0,则DP[i][j]为三者中的最小值+1,因为三者中的最小值一定为三者所共有的不含0的部分,否则会造成缺角; + +>因此对于某一点(i,j), 若matrix[i][j]=1,则动态规划表达式为DP[i][j] = min{DP[i-1][j],DP[i][j-1],DP[i-1][j-1]} + 1; + +## 5.最长回文子串 +>对于字符串str,假设dp[i,j]=1表示str[i...j]是回文子串 +>那么dp[i+1,j-1] 也必然是回文子串 +>这样最长回文子串就被分解成了一系列规模小的子问题。这样就能求解了。 + +>状态转移方程: dp[i,j]={dp[i+1,j-1],str[i]==str[j];0,str[i]!=str[j]} +