codeforces-977F-Consecutive Subsequence动态规划

Posted yangkun-

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了codeforces-977F-Consecutive Subsequence动态规划相关的知识,希望对你有一定的参考价值。

codeforces-977F-Consecutive Subsequence

传送门:codeforces-977F-Consecutive Subsequence

求最长连续上升子序列,输出序列各元素的位置

刚开始没看懂是要连续,果断打了个LIS,wa了,然后又在上面做了改动,还是不对,老老实实重写dp吧

定义dp[x]是以x为结尾的最长串的长度

状态转移方程dp[a[i]]=dp[a[i]-1]+1;

a[i]最大是1e9,数组存不下,可以用map

上代码

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 #define ll long long
 4 const int N=1e6+9;
 5 const int inf=0x3f3f3f3f;
 6 int a[N];
 7 map<int,int>dp;
 8 int main()
 9 {
10     int n,k=0,ans;
11     scanf("%d",&n);
12     for(int i=1;i<=n;i++)
13     {
14         scanf("%d",&a[i]);
15     }
16     for(int i=1;i<=n;i++)
17     {
18         dp[a[i]]=dp[a[i]-1]+1;
19         if(dp[a[i]]>k)
20         {
21             k=dp[a[i]];
22             ans=a[i];
23         }
24     }
25     printf("%d
",k);
26     int cnt=ans-k+1;
27     for(int i=1;i<=n;i++)
28     {
29         if(a[i]==cnt)
30         {
31             printf("%d ",i);
32             cnt++;
33         }
34     }
35     printf("
");
36     return 0;
37 }

 

以上是关于codeforces-977F-Consecutive Subsequence动态规划的主要内容,如果未能解决你的问题,请参考以下文章

codeforces 977A-C语言解题报告

Divide by three, multiply by two CodeForces - 977D (思维排序)

Codeforces977D ---Divide by three, multiply by two 深搜+map存出现的数