hdu1513 (滚动数据压缩空间)

给定一个字符串,问最少添加多少个字符可以使得这个字符串变成回文串

if(str[i]==str[j]) dp[i][j] = dp[i+1][j-1]

else dp[i][j] = min(dp[i][j-1],dp[i+1][j]);

可以看出,dp[i][j] 要么是从dp[i+1][] 这个状态转移而来,要么是从dp[i][j-1]这个状态转移而来(这个只要从小到大枚举j即可)

所以我们可以用滚动数组来压缩空间

 1 #pragma warning(disable:4996)
 2 #pragma comment(linker, "/STACK:1024000000,1024000000")
 3 #include <stdio.h>
 4 #include <string.h>
 5 #include <time.h>
 6 #include <math.h>
 7 #include <map>
 8 #include <set>
 9 #include <queue>
10 #include <stack>
11 #include <vector>
12 #include <bitset>
13 #include <algorithm>
14 #include <iostream>
15 #include <string>
16 #include <functional>
17 #include <unordered_map>
18 typedef __int64 LL;
19 const int INF = 999999999;
20
21 /*
22
23 if(str[i]==str[j])
24     dp[i][j] = dp[i+1][j-1]
25 else
26     dp[i][j] = min(dp[i][j-1],dp[i+1][j])
27 */
28 const int N = 5000 + 10;
29 int dp[2][N];
30 char str[N];
31
32
33 int main()
34 {
35     int n;
36     while (scanf("%d%s", &n, str+1) != EOF)
37     {
38         memset(dp, 0, sizeof(dp));
39         for (int i = n; i >= 1;--i)
40         {
41             for (int j = i + 1;j <= n;++j)
42             {
43                 if (str[i] == str[j])
44                     dp[i%2][j] = dp[(i + 1)%2][j - 1];
45                 else
46                     dp[i%2][j] = std::min(dp[(i + 1)%2][j], dp[i%2][j - 1])+1;
47             }
48         }
49         printf("%d\n", dp[1][n]);
50     }
51     return 0;
52 }
时间: 2024-10-13 01:00:40

hdu1513 (滚动数据压缩空间)的相关文章

Leetcode 494 Target Sum 动态规划 背包+滚动数据

这是一道水题,作为没有货的水货楼主如是说. 题意:已知一个数组nums {a1,a2,a3,.....,an}(其中0<ai <=1000(1<=k<=n, n<=20))和一个数S c1a1c2a2c3a3......cnan = S, 其中ci(1<=i<=n)可以在加号和减号之中任选. 求有多少种{c1,c2,c3,...,cn}的排列能使上述等式成立. 例如: 输入:nums is [1, 1, 1, 1, 1], S is 3. 输出 : 5符合要求5种

动态加载上下滚动数据列表(小程序开发)

实现如上图所示的内容,利用微信小程序自带的swiper标签,设置垂直滚动,原理就是这么简单,但是,如果需要动态加载数据呢? <view class='flex news'> <view class='news-left'>头条</view> <swiper class='news-right' vertical="true" autoplay="true" interval="3000" circular

hdu 1513(滚动数组)

Palindrome Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 4751    Accepted Submission(s): 1625 Problem Description A palindrome is a symmetrical string, that is, a string read identically from

移动web页面支持弹性滚动的3个方案

有段时间一直折腾移动端页面弹性滚动的各种问题,做了点研究,今天做个小分享~ 传统 pc 端中,子容器高度超出父容器高度,通常使用 overflow:auto 可出现滚动条拖动显示溢出的内容,而移动web开发中,由于浏览器厂商的系统不同.版本不同,导致有部分机型不支持对弹性滚动,从而在开发中制造了所谓的 BUG. 上图如果在PC端中,我们可以利用 position:fixed 和 overflow:auto 进行简单的布局实现我们需要的效果,而在手机端遇到的问题如下: ios4 和 android

poj3624 01背包入门 dp+滚动数组

poj3624 01背包 dp+滚动数组 Charm Bracelet Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 25458   Accepted: 11455 Description Bessie has gone to the mall's jewelry store and spies a charm bracelet. Of course, she'd like to fill it with the bes

PowerBuilder数据窗口

数据窗口控件是应用程序在窗口中展示数据窗口对象的唯一途径,数据窗口控件与数据窗口对象的结合构成了应用程序访问和操作数据库数据的主要手段. 数据窗口在处理数据时很有特色,它在客户机的本地内存中开辟了四个缓冲区:主缓冲区.删除缓冲区.过滤缓冲区.原始缓冲区,从数据库中检索到数据后,数据窗口根据不同情况把数据放置到不同的缓冲区.四个缓冲区各司其职,协作完成数据的增删改,最后把结果提交给数据库管理系统. 数据窗口的属性.事件和函数是灵活运用数据窗口的基础,也是数据窗口的博大精深之所在.事实上,只要有足够

js上下、左右无缝滚动加悬停

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Typ

jquery-get-data(width,height,position,(top,left),scrollTop,scrollLeft)获取数据

获取尺寸 如下: heigh([val|fn]) width([val|fn]) innerHeight() innerWidth() outerHeight([soptions]) outerWidth([options]) 下面就一一介绍(这里多说一下jquery中很多都是既可以返回匹配元素的值,又可以设置匹配元素值) height()取得匹配元素当前计算的高度值(px). width()取得第一个匹配元素当前计算的宽度值(px). /此2个方法对可见和隐藏元素均有效.另外这个补白就是pad

pb数据窗口设置操作

1 使DataWindow列只能追加不能修改如何使DataWindow中的数据只能追加新记录而不能修改,利用 Column 的 Protect 属性可以很方便的做到这一点,方法如下:将每一列的 Protect 属性设置为:If( IsRowNew(), 0, 1) )在 PowerScript 中可以动态修改 Protect 属性:dw_1.Modify("column_name_here.Protect='1~tIf(IsRowNew(),0,1)'")这样,DataWindow 中