求最长递减子序列长度问题 C++ 求指点

TanXY_915 2016-09-26 03:30:32
问题描述:求最长递减子序列的长度
代码如下:
#include "string.h"
#include <iostream>
using namespace std;
void longest_decrease_sub(char *L, int size);

void longest_decrease_sub(char *L, int size)
{
char *d = new char[size];
char *p = new char[size];
d[size - 1] = 1;
for (int i = size - 1; i >= 0; i--)
{
int max = 0;
int index = 0;
for (int j = i; j<size; j++)
{
if (L[i]>L[j] && max <d[j])
{
max = d[j];
index = j;
}
}
if (max == 0)
{
d[i] = 1;
p[i] = -1;
}
else
{
d[i] = max + 1;
p[i] = index;
}
}
int max = 0;
int max_index = 0;
for (int i = 0; i<size; i++)
{
if (d[i]>max)
{
max = d[i];
max_index = i;
}
}

cout << (int)d[max_index] << endl;
delete[] d;
delete[] p;
}

int main()
{
int test_num = 0;
cin >> test_num;

for (int i = 0; i < test_num; i++)
{
char *p = new char;
cin >> p;
int n = strlen(p);
longest_decrease_sub(p, n);
}
return 0;

}
过学校judge网站过不了 报错如下:
Runtime Error:[ERROR] A Not allowed system call: runid:68977 callid:146
*** glibc detected *** ./Main: free(): invalid next size (normal): 0x092e2710 ***

...全文
394 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
Cold_L i 2018-10-27
  • 打赏
  • 举报
回复
Cold_L i 2018-10-27
  • 打赏
  • 举报
回复
简单的C++编程,关于最长递减子序列问题的,运行结果正确,但学校编译系统提示时间超限,求大佬指教。


#include<iostream>
#include<algorithm>
using namespace std;
int n;
void sort(int *a)
{
int t;
for (int j = 0; j < n; j++)
{
for (int i = 0; i < n-j; i++)
{
if (a[i] < a[i + 1])
{
t = a[i];
a[i] = a[i + 1];
a[i + 1] = t;
}

}


}
}
int main()
{
cin >> n;
int a[1001];
for (int i = 0; i < n; i++)
cin >> a[i];
sort(a);
for (int i = 0; i < n; i++)
{
if (a[i] == a[i + 1])
a[i] = a[i + 1], i = i + 1;
cout << a[i] << " ";
}
system("pause");
return 0;
}




TanXY_915 2016-09-26
  • 打赏
  • 举报
回复
引用 4 楼 paschen 的回复:
[quote=引用 3 楼 TTTimeless_915的回复:][quote=引用 2 楼 paschen 的回复:] char *p = new char;只分配一个字符,cin>>p的时候可能越界了
我还想问啊 每次复制粘贴输入数据 最后一组数据 总是要我自己 回车一下 是实现得不好导致的么 要怎么改一改么?[/quote] 上面说了,p越界了,就算你只输入一个字符‘2’,后面还有\0 也要占一个字符 另一个问题:回车一下什么意思,复制的数据是什么内容[/quote] 那个越界知道了 改了改 没问题 后面那个是我自己脑子有问题 也没问题了- - THX
paschen 版主 2016-09-26
  • 打赏
  • 举报
回复
引用 3 楼 TTTimeless_915的回复:
[quote=引用 2 楼 paschen 的回复:]
char *p = new char;只分配一个字符,cin>>p的时候可能越界了



我还想问啊
每次复制粘贴输入数据 最后一组数据 总是要我自己 回车一下
是实现得不好导致的么 要怎么改一改么?[/quote] 上面说了,p越界了,就算你只输入一个字符‘2’,后面还有\0 也要占一个字符 另一个问题:回车一下什么意思,复制的数据是什么内容
TanXY_915 2016-09-26
  • 打赏
  • 举报
回复
引用 2 楼 paschen 的回复:
char *p = new char;只分配一个字符,cin>>p的时候可能越界了



我还想问啊
每次复制粘贴输入数据 最后一组数据 总是要我自己 回车一下
是实现得不好导致的么 要怎么改一改么?
paschen 版主 2016-09-26
  • 打赏
  • 举报
回复
char *p = new char;只分配一个字符,cin>>p的时候可能越界了
TanXY_915 2016-09-26
  • 打赏
  • 举报
回复
不知道他这个报错是什么意思 尴尬= =

64,685

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧