博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
hdu--4632--dp
阅读量:5366 次
发布时间:2019-06-15

本文共 2578 字,大约阅读时间需要 8 分钟。

dp我突然觉得 没必要将它仔细地分成各种种类 都是利用了差不多什么递推 利用前面计算出来的子结果什么的思想

这题的状态 不难想 因为一个回文串肯定是有左右端点啊 那么就肯定有2维状态了 然后就是递推吧

这边有些初始化 可以先完成 也可以在解决的时候 一并完成 随你

我一开始自己写的是 记忆化搜索的写法. 然后有人写了直接for递推的  速度比我这 递归的快了3倍吧 

我把2种都贴上来  顺便写下 状态转移方程

dp[x][y] = dp[x][y-1] + dp[x+1][y] - dp[x+1][y-1]    if str[x]==str[y]  dp[x][y] += dp[x+1][y-1] + 1;

1 #include 
2 #include
3 using namespace std; 4 5 const int size = 1010; 6 const int mod = 10007; 7 int len; 8 char str[size]; 9 int dp[size][size];10 11 int dfs( int L , int R )12 {13 if( L<1 || R>len || L>R )14 return 0;15 if( dp[L][R] )16 return dp[L][R];17 if( L==R )18 {19 dp[L][R] = 1;20 }21 else if( L+1==R ) 22 {23 if( str[L]==str[R] )24 {25 dp[L][R] = 3;26 }27 else28 {29 dp[L][R] = 2;30 }31 }32 else33 {34 if( str[L] == str[R] )35 dp[L][R] = ( dfs( L , R-1 ) + dfs( L+1 , R ) + 1 ) % mod ;36 else37 dp[L][R] = ( dfs( L , R-1 ) + dfs( L+1 , R ) - dfs( L+1 , R-1 ) + mod ) %mod;38 }39 return dp[L][R];40 }41 42 int main()43 {44 int t , ans;45 scanf("%d",&t);46 for( int k = 1 ; k<=t ; k++ )47 {48 cin >> (str+1);49 len = strlen(str+1);50 memset( dp , 0 , sizeof(dp) );51 ans = dfs( 1 , len );52 printf("Case %d: %d\n",k,ans%mod);53 }54 return 0;55 }
View Code

那个for循环的外层是区间长度 内存是左边端点起始坐标 这个递推顺序一定不能错  你可以根据你的状态转移方程来确定

1 #include 
2 #include
3 using namespace std; 4 5 const int size = 1010; 6 const int mod = 10007; 7 int len; 8 char str[size]; 9 int dp[size][size];10 11 void solve( )12 {13 for( int i = 1 ; i<=len ; i++ )14 {15 for( int j = 1 ; j+i<=len ; j++ ) 16 {17 if( str[j] == str[i+j] )18 dp[j][i+j] = dp[j+1][i+j] + dp[j][i+j-1] + 1;19 else20 dp[j][i+j] = dp[j+1][i+j] + dp[j][i+j-1] - dp[j+1][i+j-1];21 dp[j][i+j] = (dp[j][i+j]+mod)%mod;22 }23 }24 }25 26 int main()27 {28 int t , ans;29 scanf("%d",&t);30 for( int k = 1 ; k<=t ; k++ )31 {32 cin >> (str+1);33 len = strlen(str+1);34 memset( dp , 0 , sizeof(dp) );35 for( int i = 1 ; i<=len ; i++ )36 dp[i][i] = 1;37 solve( );38 printf("Case %d: %d\n",k,dp[1][len]%mod);39 }40 return 0;41 }
View Code

 

 

today:

  11.11   童话里都是骗人的

 

转载于:https://www.cnblogs.com/radical/p/4088483.html

你可能感兴趣的文章
[搬运] 写给 C# 开发人员的函数式编程
查看>>
core--线程池
查看>>
他山之石:加载图片的一个小问题
查看>>
shell - 常识
查看>>
Spring Cloud Stream消费失败后的处理策略(三):使用DLQ队列(RabbitMQ)
查看>>
PKUWC2018 5/6
查看>>
As-If-Serial 理解
查看>>
洛谷P1005 矩阵取数游戏
查看>>
在Silverlight中使用HierarchicalDataTemplate为TreeView实现递归树状结构
查看>>
无线通信基础(一):无线网络演进
查看>>
关于python中带下划线的变量和函数 的意义
查看>>
linux清空日志文件内容 (转)
查看>>
Ajax : load()
查看>>
MySQL-EXPLAIN执行计划Extra解释
查看>>
图片点击轮播(三)-----2017-04-05
查看>>
直播技术细节3
查看>>
《分布式服务架构:原理、设计于实战》总结
查看>>
java中new一个对象和对象=null有什么区别
查看>>
字母和数字键的键码值(keyCode)
查看>>
01_1_准备ibatis环境
查看>>