码迷,mamicode.com
首页 > 编程语言 > 详细

POJ 1159 滚动数组优化内存

时间:2015-03-14 19:53:43      阅读:207      评论:0      收藏:0      [点我收藏+]

标签:

题意:

  输入一个n和长度为n的字符串,求最少需要增加多少个字符,使之成为一个回文(从左到右读和从右到左读是一样的)   (其实就是括号配对的变形)

 

知识点:

  滚动数组内存优化。就像dp[5005][5005] ,占用的内存太大 ,无法编译,利用滚动数组就能很好的解决这个问题,简单来说就是dp[3][5005]来代替dp[5005][5005] ,用dp[i%3][j],dp[(i-1)%3][j], dp[(i+1)%3][j]表示。(其实这一题还可以这样改:用short int dp[5005][5005])

具体可以看 http://blog.csdn.net/niushuai666/article/details/6677982,解释的比较详细

 

技术分享
 1 #include <iostream>
 2 #include <algorithm>
 3 using namespace std;
 4 char str[5005];
 5 int dp[3][5005];
 6 int main()
 7 {
 8     int n;
 9     int i,j,k;
10     cin>>n;
11     cin>>str;
12     for(int l=2;l<=n;l++)
13     {
14         for(i=0;i<n-l+1;i++)
15         {
16             j = i+l-1;
17             if(str[i]!=str[j]) 
18                 dp[i%3][j] = min(dp[(i+1)%3][j]+1,dp[i%3][j-1]+1);
19             else dp[i%3][j] = dp[(i+1)%3][j-1];
20         }
21     }
22     cout<<dp[0][n-1]<<endl;
23     return 0;
24 } 
View Code

 

POJ 1159 滚动数组优化内存

标签:

原文地址:http://www.cnblogs.com/yscc/p/4338059.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!