*题目编号:1024
*简单题意:求给定数的子串
*解题思路:DFS,从第一个数开始,找比它大的数,同时记录子串大小,知道找不到比他大的,继续第二个数查找
*感想:24题和25差不多
*AC源码
# include <iostream>
# include <cstdio>
# include <cstdlib>
# include <algorithm>
using namespace std;
int n, p, len, Count;
int num[1001];
bool flag;
struct Tem
{
int n, pos;
};
Tem tem[1001];
bool check(int from, int cur)
{
for (int i = from + 1; i < cur; i++)
if (num[i] == num[cur])
return false;
return true;
}
void print(int length)
{
for (int i = 0; i < length - 1; i++)
cout << tem[i].n << " ";
cout << tem[length - 1].n << endl;
}
void dfs(int dep, int pos)
{
if (Count >= p)return;
if (dep == len)
{
Count++;
flag = true;
print(len);
return;
}
for (int i = pos; i<n; i++)
{
if ((dep != 0 && tem[dep - 1].n <= num[i]) || dep == 0)
{
if (dep == 0 && !check(-1, i))
continue;
if (dep != 0 && !check(tem[dep - 1].pos, i))
continue;
tem[dep].n = num[i];
tem[dep].pos = i;
dfs(dep + 1, i + 1);
}
}
return;
}
int main()
{
while (cin >> n >> p)
{
for (int i = 0; i<n; i++)
cin >> num[i];
Count = 0;
for (int i = 1; i < n; i++)
{
flag = false;
len = i;
dfs(0, 0);
if (Count >=p || !flag)break;
}
cout << endl;
}
return 0;
}
Sequence one
Time Limit : 6000/2000ms (Java/Other) Memory Limit : 32768/32768K (Java/Other)
Total Submission(s) : 17 Accepted Submission(s) : 9
3 5<br>1 3 2<br>3 6<br>1 3 2<br>4 100<br>1 2 3 2<br>
1<br>3<br>2<br>1 3<br>1 2<br><br>1<br>3<br>2<br>1 3<br>1 2<br><br>1<br>2<br>3<br>1 2<br>1 3<br>2 3<br>2 2<br>1 2 3<br>1 2 2<br><br><br><div style='font-family:Times New Roman;font-size:14px;background-color:F4FBFF;border:#B7CBFF 1px dashed;padding:6px'><div style='font-family:Arial;font-weight:bold;color:#7CA9ED;border-bottom:#B7CBFF 1px dashed'><i>Hint</i></div>Hint : You must make sure each subsequence in the subsequences is unique.</div>