博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
拦截导弹 (NYOJ—79) 最长字串问题 (NYOJ—17)
阅读量:7292 次
发布时间:2019-06-30

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

这是到动态规划的题目,属于有顺序的0 1 背包问题;

代码:

1 #include
2 #include
3 4 int d[20][100000]; //d[i][j] 5 int a[20]; 6 int N; 7 8 int max(int a, int b) 9 {10 return a>b?a:b;11 }12 13 int solve(int i,int high)14 {15 if(d[i][high]>=0)16 return d[i][high];17 if(i==N)18 {19 if(a[i]

但这个代码提交会得到RE,至于为什么可能是记忆话搜索对这个的复杂度减小的比较小,所以递归深度太深,造成堆栈溢出。

我想多了,不是这个原因,是我没有注意到下标越界了。

AC代码:

1 #include
2 #include
3 4 int d[22][1000]; //d[i][j] 5 int a[22]; 6 int N; 7 8 int max(int a, int b) 9 {10 return a>b?a:b;11 }12 13 int solve(int i,int high)14 {15 if(d[i][high]>=0)16 return d[i][high];17 if(i==N)18 {19 if(a[i]

 我不知道原来这种问题叫 最长递增子序列问题  我还给他起了个(顺序0 1 背包问题),我这就透过本质起的名字。

最长字串问题  (NYOJ - 17)

AC代码:

#include
#include
#include
int d[10002][180];char a[10002];int N;int max(int a, int b){ return a>b?a:b;}int dp(int i, char c){ if(d[i][c]>=0) return d[i][c]; if(i==N-1) { if(a[i]>c) return d[i][c] = 1; else return d[i][c] = 0; } if(a[i]>c) return d[i][c]=max(dp(i+1,c),dp(i+1,a[i])+1); else return d[i][c]=dp(i+1,c);}int main(){ int T; scanf("%d",&T); while(T--) { memset(d,-1,sizeof(d)); scanf("%s",a); N = strlen(a); printf("%d\n",dp(0,0)); } return 0;}
View Code

 

转载于:https://www.cnblogs.com/chaiwentao/p/3948308.html

你可能感兴趣的文章
Android 监听事件
查看>>
基于CentOS6.5环境之下的LNMP之编译安装mysql5.6.27
查看>>
《系统运维全面解析:技术、管理与实践》纠错汇总
查看>>
Object类对线程的支持----等待与唤醒
查看>>
硬盘串口和并口的区别
查看>>
java multithreading server example
查看>>
自动分发神器搭建kickstart
查看>>
我的友情链接
查看>>
mysql主从复制,半同步,主主复制架构的实现
查看>>
keepalived通过vrr_script实现高可用性案例分析
查看>>
寓言四则
查看>>
让那些设计师在没有斗志的时候读读
查看>>
SQLServer2008 数据库 开启 远程 连接 设置
查看>>
嵌入式开发交叉调试技术简介
查看>>
JavaScript基础
查看>>
C#重点内容之:接口(interface)(一)网络初级示例
查看>>
dojo表格操作的简单示例(建立表格)
查看>>
div辅助线【完整版】
查看>>
ZZULIOJ 1898: 985的数字难题 【水题】
查看>>
移动tempdb导致数据库服务不能启动
查看>>