【区间dp】LightOJ 1025 The Specials Menu
2016-10-19 21:49
363 查看
我是弱鸡,递推式推理错误,能wa n发。
队友提点,由小区间推大区间。举一个列子理解:abca,首位和末尾是相同的,那么其区间方法数为abc区间方法数+bca区间放法数在加1(代表abca不处理);如果:abcd,首位和末尾不相同的,那么其方法数为abc方法数+bcd方法数-bc方法数(因为重复计算)。
注意:答案的范围
队友提点,由小区间推大区间。举一个列子理解:abca,首位和末尾是相同的,那么其区间方法数为abc区间方法数+bca区间放法数在加1(代表abca不处理);如果:abcd,首位和末尾不相同的,那么其方法数为abc方法数+bcd方法数-bc方法数(因为重复计算)。
注意:答案的范围
#include <stdio.h> #include <iostream> #include <string.h> #include <math.h> #include <algorithm> using namespace std; const double PI = 2*acos(0.0); const double add = 1e-9; const int N = 100; char s ; long long dp ; int main() { int T,cas = 1; scanf("%d",&T); while(T--) { scanf("%s",s); int n = strlen(s); memset(dp,0,sizeof(dp)); for(int i = n-1; i >= 0; i--) { for(int j = i; j < n; j++) { if(i == j) dp[i][j] = 1; else { if(s[i] != s[j]) dp[i][j] = dp[i+1][j] + dp[i][j-1] - dp[i+1][j-1]; else dp[i][j] = dp[i+1][j] + dp[i][j-1] +1; } } } printf("Case %d: %lld\n",cas++,dp[0][n-1]); } return 0; }
相关文章推荐
- LightOJ - 1025 The Specials Menu(区间DP)
- lightoj 1025-The Specials Menu 区间DP
- LightOJ 1025 - The Specials Menu (区间dp)
- Lightoj 1025 - The Specials Menu (区间DP)
- LightOJ 1025 - The Specials Menu(区间DP)
- lightoj 1025 - The Specials Menu 【区间dp】
- LightOJ 1025 - The Specials Menu【区间DP】
- Light OJ 1025 The Specials Menu(区间DP)
- Light OJ 1025 The Specials Menu (区间DP)
- lightoj 1025 The Specials Menu (DP)
- Light OJ 1025 - The Specials Menu(区间DP)
- LightOJ 1025 - The Specials Menu(dp)
- Light OJ 1025 The Specials Menu 详细题解(回文串的区间DP)
- light oj 1025 - The Specials Menu(区间DP->求删除字符使其成为回文串的方法数)
- LightOJ 1025 - The Specials Menu
- The Specials Menu 基础区间 dp
- Lightoj 1025 - The Specials Menu
- LightOJ1025 The Specials Menu(区间DP)
- LightOJ 1025 The Specials Menu(记忆化搜索)
- LightOJ1025-The Specials Menu-区间dp