站外题求助(悬关)

题目总版

666
by fangceyuan2013 @ 2024-04-28 20:24:20


@[fangceyuan2013](/user/1012132) ?
by __xsy2013__ @ 2024-04-28 20:32:40


能不能别无意义了?
by 99999873654as7829 @ 2024-04-28 20:33:54


@[99999873654as7829](/user/1044851) 没有账号看不了题目。不过看着是 dp,每次转移记一下来源最后回溯输出应该就好了。
by Kazeno_Akina @ 2024-04-28 20:37:20


@[DoraYaoxy](/user/612567) 或者看[这个](http://ybt.ssoier.cn:8088/problem_show.php?pid=1259)
by 99999873654as7829 @ 2024-04-28 20:38:31


@[99999873654as7829](/user/1044851) 那就是每次转移额外开一个数组记录转移来源(相当于,如果以现在更新的一项为数列结尾,那么最优解的倒数第二项是什么),最后从所有解里找到最优的之后顺着记录回溯就好了。
by Kazeno_Akina @ 2024-04-28 20:41:04


@[DoraYaoxy](/user/612567) code?
by 99999873654as7829 @ 2024-04-28 20:48:19


@[99999873654as7829](/user/1044851) 我用的手机,只能给你打点关键代码了。 开一个和 `dp` 等大的数组叫做 `f`,记录转移来源。 循环内转移处改为 `if(a[j]<=a[i]&&dp[i]<dp[j]+1) dp[i]=dp[j],f[i]=j;` 求 `ans` 时再开一个 `ansp`,记录答案位置。 最后可以 `for(int i=ansp;i;i=f[i]) memans[++tot]=i;` 输出序列直接从 `tot` 到 1 遍历 `memans` 即可。
by Kazeno_Akina @ 2024-04-28 21:00:13


|