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

代码:

  1. #include<stdio.h>
  2. #include<string.h>
  3.  
  4. int d[][]; //d[i][j]
  5. int a[];
  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]>=)
  16. return d[i][high];
  17. if(i==N)
  18. {
  19. if(a[i]<high)
  20. return d[N][high]=;
  21. else
  22. return d[N][high]=;
  23. }
  24. if(a[i]<high)
  25. return d[i][high]=max(solve(i+,a[i])+,solve(i+,high)); //打击和不打击 取大者
  26. else
  27. return d[i][high]=solve(i+,high);
  28. }
  29.  
  30. int main()
  31. {
  32. int T;
  33. scanf("%d",&T);
  34. while(T--)
  35. {
  36. memset(d,-,sizeof(d));
  37. scanf("%d",&N);
  38. for(int i=; i<=N; i++)
  39. {
  40. scanf("%d",&a[i]);
  41. }
  42. printf("%d\n",solve(,));
  43. }
  44. return ;
  45. }

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

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

AC代码:

  1. #include<stdio.h>
  2. #include<string.h>
  3.  
  4. int d[][]; //d[i][j]
  5. int a[];
  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]>=)
  16. return d[i][high];
  17. if(i==N)
  18. {
  19. if(a[i]<high)
  20. return d[N][high]=;
  21. else
  22. return d[N][high]=;
  23. }
  24. if(a[i]<high)
  25. return d[i][high]=max(solve(i+,a[i])+,solve(i+,high)); //打击和不打击 取大者
  26. else
  27. return d[i][high]=solve(i+,high);
  28. }
  29.  
  30. int main()
  31. {
  32. int T;
  33. scanf("%d",&T);
  34. while(T--)
  35. {
  36. memset(d,-,sizeof(d));
  37. scanf("%d",&N);
  38. for(int i=; i<=N; i++)
  39. {
  40. scanf("%d",&a[i]);
  41. }
  42. printf("%d\n",solve(,));
  43. }
  44. return ;
  45. }

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

最长字串问题  (NYOJ - 17)

AC代码:

  1. #include<stdio.h>
  2. #include<stdlib.h>
  3. #include<string.h>
  4.  
  5. int d[][];
  6. char a[];
  7. int N;
  8.  
  9. int max(int a, int b)
  10. {
  11. return a>b?a:b;
  12. }
  13.  
  14. int dp(int i, char c)
  15. {
  16. if(d[i][c]>=)
  17. return d[i][c];
  18. if(i==N-)
  19. {
  20. if(a[i]>c)
  21. return d[i][c] = ;
  22. else
  23. return d[i][c] = ;
  24. }
  25. if(a[i]>c)
  26. return d[i][c]=max(dp(i+,c),dp(i+,a[i])+);
  27. else
  28. return d[i][c]=dp(i+,c);
  29. }
  30.  
  31. int main()
  32. {
  33. int T;
  34. scanf("%d",&T);
  35. while(T--)
  36. {
  37. memset(d,-,sizeof(d));
  38. scanf("%s",a);
  39. N = strlen(a);
  40. printf("%d\n",dp(,));
  41. }
  42. return ;
  43. }

拦截导弹 (NYOJ—79) 最长字串问题 (NYOJ—17)的更多相关文章

  1. LeetCode-3.无重复字符的最长字串

    给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度. 示例 1: 输入: "abcabcbb" 输出: 3 解释: 因为无重复字符的最长子串是 "abc&qu ...

  2. 【leetcode算法-中等】3. 无重复字符的最长字串

    [题目描述] 给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度. 示例 1: 输入: "abcabcbb"输出: 3 解释: 因为无重复字符的最长子串是 " ...

  3. LeetCode#3 - 无重复字符的最长字串(滑动窗口)

    题目: 给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度. 示例: abcabcbb 输出的结果应该是3,最长的无重复的字串是'abc' 果然无论做什么都要静下心来啊!昨晚上卡了一个多小 ...

  4. nyoj 经典的连续字串和

    import java.util.Scanner; public class 字串和 { public static void main(String[] args) { // TODO Auto-g ...

  5. 拦截导弹简单版(读入一串整数时getline(cin,s) stringstream is(s);)

    拦截导弹简单版 时间限制: 1 Sec  内存限制: 128 MB提交: 40  解决: 16[提交][状态][讨论版][命题人:外部导入] 题目描述 某国为了防御敌国的导弹袭击,发展出一种导弹拦截系 ...

  6. POJ 1743-POJ - 3261~后缀数组关于最长字串问题

    POJ 1743 题意: 有N(1 <= N <=20000)个音符的序列来表示一首乐曲,每个音符都是1~~88范围内的整数,现在要找一个重复的主题.“主题”是整个音符序列的一个子串,它需 ...

  7. Leetcode3.Longest Substring Without Repeating Characters无重复字符的最长字串

    给定一个字符串,找出不含有重复字符的最长子串的长度. 示例 1: 输入: "abcabcbb" 输出: 3 解释: 无重复字符的最长子串是 "abc",其长度为 ...

  8. leetcode Longest Common Prefix 多个字符串的最长字串

    public class Solution { public String get(String a,String b) { if(a==""||b=="") ...

  9. Longest Substring Without Repeating Characters,求没有重复字符的最长字串

    问题描述: Given a string, find the length of the longest substring without repeating characters. Example ...

随机推荐

  1. sqoop导入增量数据

    使用sqoop导入增量数据. 核心参数 --check-column 用来指定一些列,这些列在增量导入时用来检查这些数据是否作为增量数据进行导入,和关系行数据库中的自增字段及时间戳类似这些被指定的列的 ...

  2. web.config中httpRedirect - 重定向单个页面

    例:在下面的例子中,“目录包含page1.htm,page2.htm,page3.htm和page4.htm.如下所示的web.config文件将执行以下操作/pages/page1.htm会重定向到 ...

  3. 09 - Django应用第六步

    1 自定义页面 在项目中, 肯定不会只是显示单纯的HTML文件, 我们可能还需要JS, CSS, 图片等 这些文件就被称为静态文件(starIc files) 在小的项目中, 可能静态文件比较少, 但 ...

  4. NYOJ-小猴子下落

    描述 有一颗二叉树,最大深度为D,且所有叶子的深度都相同.所有结点从左到右从上到下的编号为1,2,3,·····,2的D次方减1.在结点1处放一个小猴子,它会往下跑.每个内结点上都有一个开关,初始全部 ...

  5. ACM学习历程—CSU 1216 异或最大值(xor && 贪心 && 字典树)

    题目链接:http://acm.csu.edu.cn/OnlineJudge/problem.php?id=1216 题目大意是给了n个数,然后取出两个数,使得xor值最大. 首先暴力枚举是C(n,  ...

  6. bzoj 2969: 矩形粉刷 概率期望

    题目: 为了庆祝新的一年到来,小M决定要粉刷一个大木板.大木板实际上是一个W*H的方阵.小M得到了一个神奇的工具,这个工具只需要指定方阵中两个格子,就可以把这两格子为对角的,平行于木板边界的一个子矩形 ...

  7. 【Python】正则表达式中使用变量

    我们有时想把变量放进正则表达式中来匹配想要的结果.Python中使用 re.compile(r''+变量+''),其中正则表达式中的“变量”应为字符串形式. import re regex_test_ ...

  8. bzoj 4823 & 洛谷 P3756 老C的方块 —— 最小割

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=4823 https://www.luogu.org/problemnew/show/P3756 ...

  9. python构造一个http请求

    我们经常会用python来进行抓包,模拟登陆等等, 势必要构造http请求包. http的request通常有4个方法get,post,put,delete,分别对应于查询,更新,添加,删除.我们经常 ...

  10. asp.net分页asp.net无刷新分页高效率分页

    项目中经常会用到分页的功能类似的项目做过无数个了,今个把自己常用的分页代码分享一下. 首先说说服务端处理的代码: 下面代码中重点是分页的sql语句的写法,其中的参数@n是当前的页码,总的来说本服务端主 ...