拦截导弹 (NYOJ—79) 最长字串问题 (NYOJ—17)
这是到动态规划的题目,属于有顺序的0 1 背包问题;
代码:
#include<stdio.h>
#include<string.h> int d[][]; //d[i][j]
int a[];
int N; int max(int a, int b)
{
return a>b?a:b;
} int solve(int i,int high)
{
if(d[i][high]>=)
return d[i][high];
if(i==N)
{
if(a[i]<high)
return d[N][high]=;
else
return d[N][high]=;
}
if(a[i]<high)
return d[i][high]=max(solve(i+,a[i])+,solve(i+,high)); //打击和不打击 取大者
else
return d[i][high]=solve(i+,high);
} int main()
{
int T;
scanf("%d",&T);
while(T--)
{
memset(d,-,sizeof(d));
scanf("%d",&N);
for(int i=; i<=N; i++)
{
scanf("%d",&a[i]);
}
printf("%d\n",solve(,));
}
return ;
}
但这个代码提交会得到RE,至于为什么可能是记忆话搜索对这个的复杂度减小的比较小,所以递归深度太深,造成堆栈溢出。
我想多了,不是这个原因,是我没有注意到下标越界了。
AC代码:
#include<stdio.h>
#include<string.h> int d[][]; //d[i][j]
int a[];
int N; int max(int a, int b)
{
return a>b?a:b;
} int solve(int i,int high)
{
if(d[i][high]>=)
return d[i][high];
if(i==N)
{
if(a[i]<high)
return d[N][high]=;
else
return d[N][high]=;
}
if(a[i]<high)
return d[i][high]=max(solve(i+,a[i])+,solve(i+,high)); //打击和不打击 取大者
else
return d[i][high]=solve(i+,high);
} int main()
{
int T;
scanf("%d",&T);
while(T--)
{
memset(d,-,sizeof(d));
scanf("%d",&N);
for(int i=; i<=N; i++)
{
scanf("%d",&a[i]);
}
printf("%d\n",solve(,));
}
return ;
}
我不知道原来这种问题叫 最长递增子序列问题 我还给他起了个(顺序0 1 背包问题),我这就透过本质起的名字。
最长字串问题 (NYOJ - 17)
AC代码:
#include<stdio.h>
#include<stdlib.h>
#include<string.h> int d[][];
char a[];
int N; int max(int a, int b)
{
return a>b?a:b;
} int dp(int i, char c)
{
if(d[i][c]>=)
return d[i][c];
if(i==N-)
{
if(a[i]>c)
return d[i][c] = ;
else
return d[i][c] = ;
}
if(a[i]>c)
return d[i][c]=max(dp(i+,c),dp(i+,a[i])+);
else
return d[i][c]=dp(i+,c);
} int main()
{
int T;
scanf("%d",&T);
while(T--)
{
memset(d,-,sizeof(d));
scanf("%s",a);
N = strlen(a);
printf("%d\n",dp(,));
}
return ;
}
拦截导弹 (NYOJ—79) 最长字串问题 (NYOJ—17)的更多相关文章
- LeetCode-3.无重复字符的最长字串
给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度. 示例 1: 输入: "abcabcbb" 输出: 3 解释: 因为无重复字符的最长子串是 "abc&qu ...
- 【leetcode算法-中等】3. 无重复字符的最长字串
[题目描述] 给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度. 示例 1: 输入: "abcabcbb"输出: 3 解释: 因为无重复字符的最长子串是 " ...
- LeetCode#3 - 无重复字符的最长字串(滑动窗口)
题目: 给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度. 示例: abcabcbb 输出的结果应该是3,最长的无重复的字串是'abc' 果然无论做什么都要静下心来啊!昨晚上卡了一个多小 ...
- nyoj 经典的连续字串和
import java.util.Scanner; public class 字串和 { public static void main(String[] args) { // TODO Auto-g ...
- 拦截导弹简单版(读入一串整数时getline(cin,s) stringstream is(s);)
拦截导弹简单版 时间限制: 1 Sec 内存限制: 128 MB提交: 40 解决: 16[提交][状态][讨论版][命题人:外部导入] 题目描述 某国为了防御敌国的导弹袭击,发展出一种导弹拦截系 ...
- POJ 1743-POJ - 3261~后缀数组关于最长字串问题
POJ 1743 题意: 有N(1 <= N <=20000)个音符的序列来表示一首乐曲,每个音符都是1~~88范围内的整数,现在要找一个重复的主题.“主题”是整个音符序列的一个子串,它需 ...
- Leetcode3.Longest Substring Without Repeating Characters无重复字符的最长字串
给定一个字符串,找出不含有重复字符的最长子串的长度. 示例 1: 输入: "abcabcbb" 输出: 3 解释: 无重复字符的最长子串是 "abc",其长度为 ...
- leetcode Longest Common Prefix 多个字符串的最长字串
public class Solution { public String get(String a,String b) { if(a==""||b=="") ...
- Longest Substring Without Repeating Characters,求没有重复字符的最长字串
问题描述: Given a string, find the length of the longest substring without repeating characters. Example ...
随机推荐
- hiho一下 第四十九周 题目1 : 欧拉路·一【无向图 欧拉路问题】
题目1 : 欧拉路·一 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 小Hi和小Ho最近在玩一个解密类的游戏,他们需要控制角色在一片原始丛林里面探险,收集道具,并找到最 ...
- CodeForces 292D Connected Components (并查集+YY)
很有意思的一道并查集 题意:给你n个点(<=500个),m条边(<=10000),q(<=20000)个询问.对每个询问的两个值xi yi,表示在从m条边内删除[xi,yi]的边后 ...
- BZOJ 1597 [Usaco2008 Mar]土地购买:斜率优化dp
题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1597 题意: 有n块矩形土地,长为a[i],宽为b[i]. FJ想要将这n块土地全部买下来 ...
- sqlserver 函数里并返回一个表格数据拼接的字符串
Create function [dbo].[GetChildWorkerExtension]( @ChildId int)returns nvarchar(100)asbegin ...
- 浏览器访问web站点原理图
启动tomcat,在浏览器中输入http://localhost:8080/web_kevin/hello.html,发生的事情如下: 1.浏览器解析主机名,即解析localhost.浏览器首先会到本 ...
- Java集合类--->入门上篇
最近我又在研究Java语言,这是第五次还是第六次学习Java的集合类,你也许会惊讶为什么这么多次?哈哈,因为之前的我没有记录下来,忘记了,当然最主要还是觉得自己毅力不够,没有坚持.那么,这次我将换一种 ...
- Mysql总结_02_mysql数据库忘记密码时如何修改
1.从cmd进入mysql的bin下,输入命令 mysqld --skip-grant-tables 回车 注:(输入命令前,确保在任务管理器中已没有mysql的进程在运行,可输入命令:net s ...
- Vue从接口请求数据
<!doctype html> <html> <head> <meta charset="UTF-8"> <title> ...
- java try中包含return语句,finally中的return语句返回顺序
//结论: finally 中的代码比 return 和 break 语句后执行 public static void main(String[] args) { int x=new Test.tes ...
- android 应用程序Activity之间数据传递与共享的几种途径
一.基于消息的通信机制 Intent ---boudle ,extraAndroid为了屏蔽进程的概念,利用不同的组件[Activity.Service]来表示进程之间的通信!组件间通信的核心机制是I ...