HDU 4632 多校四-1001(DP的应用)
来源:互联网 发布:微信换群软件 编辑:程序博客网 时间:2024/05/22 14:13
题目:题目链接
题目的意思就是给你一个字符串,让你找出其中的不同回文子序列的个数有多少。
这道题刚刚拿到手想到上一场多校的1008了,结果那样跑的话就只是第四个样例都卡了好久才出来。所以这样肯定不行,自己一直想到的是枚举,不懂算法。后来看到的是指可以采用区间DP。简单的来说就是用dp[i][j]表示i,j区间内的回文子序列的个数,我们判断的时候,如果发现sp[i]==sp[j],那么回文子序列就可以加长了。也就是在内部的长度上++,就是dp[i][j]+=dp[i+1][j-1]。就是往两边扩散。
#include <iostream>#include <cstdio>#include <string>#include <string.h>#include <map>#include <vector>#include <cstdlib>#include <cmath>#include <algorithm>#include <queue>#include <set>#include <stack>using namespace std;#define N 10007char sp[1010];__int64 dp[1010][1010];int main(){ int t; scanf("%d", &t); int cnt = 1; while(t--) { memset(sp, 0, sizeof(sp)); memset(dp, 0, sizeof(dp)); scanf("%s", sp); int len = strlen(sp); for(int i = 0; i < len; ++i) dp[i][i] = 1; for(int j = 2; j <= len; ++j) { for(int k = 0; k < len+1-j; ++k) { if(sp[k] == sp[j + k - 1]) dp[k][j + k - 1] ++; else if(k + 1 <= j + k -2) dp[k][j + k - 1] -= dp[k+1][j + k - 2]; dp[k][j + k - 1] += dp[k + 1][j + k - 1] + dp[k][j + k - 2]; dp[k][j + k - 1] %= N; } } printf("Case %d: %I64d\n", cnt++, (dp[0][len-1]+N)%N); } return 0;}
交的时候WA了一次,是因为取模的时候忘加N了,防止负数的出现嘛。
- HDU 4632 多校四-1001(DP的应用)
- hdu-1171Big Event in HDU(dp的应用)
- hdu 1506 dp思想的应用
- hdu 1520 树形dp的应用
- HDU 1227 dp距离和最小,中位数的应用
- HDU 2084 数塔(DP初步应用)
- 动态规划dp(简单应用)hdu 2151 Worm(石头)
- hdu 2067 小兔的棋盘 (DP)
- HDU 2018 母牛的故事(dp)
- DP的简单应用
- hdu(kmp的应用)
- hdu 4632 Palindrome subsequence(DP)
- hdu - 4632 - Palindrome subsequence(dp)
- 【HDU】4632 Palindrome subsequence (DP)
- HDU 4632 Palindrome subsequence(区间dp)
- hdu 4632 Palindrome subsequence(dp)
- HDU 4632 Palindrome subsequence (区间DP)
- HDU 4632 回文串(区间dp)
- 根文件系统的建立
- Ubuntu修复日记
- 常用符号翻译
- 我與依依的橙色岁月-学习状态码的神文
- Linux下三种配置环境变量的方式
- HDU 4632 多校四-1001(DP的应用)
- 学生信息管理系统之恍然大悟(1)
- 发布与逸出
- iOS: NSDictionary的方法dictionaryWithObject:forKey:
- hdu 4639 Hehe 多校第四场
- VMware 虚拟机中安装 FreeBSD (FreeBSD-9.1-RELEASE-i386-dvd1) gnome桌面
- asp.net关于页面不回发的问题,寻求完美解决方案
- 嵌入式WEB开发中常用到的一些命令和资源
- iOS: NSDictionary的方法dictionaryWithObjects:forKeys: