接龙数列问题的动态规划解法
创作时间:
作者:
@小白创作中心
接龙数列问题的动态规划解法
引用
CSDN
1.
https://m.blog.csdn.net/weixin_67289517/article/details/144309288
对于一个长度为 $K$ 的整数数列:$A_1, A_2, ..., A_K$,我们称之为接龙数列当且仅当 $A_i$ 的首位数字恰好等于 $A_{i-1}$ 的末位数字 $(2 \leq i \leq K)$。
例如 $12, 23, 35, 56, 61, 11$ 是接龙数列;$12, 23, 34, 56$ 不是接龙数列,因为 $56$ 的首位数字不等于 $34$ 的末位数字。
所有长度为 $1$ 的整数数列都是接龙数列。
现在给定一个长度为 $N$ 的数列 $A_1, A_2, ..., A_N$,请你计算最少从中删除多少个数,可以使剩下的序列是接龙序列?
输入格式
第一行包含一个整数 $N$。
第二行包含 $N$ 个整数 $A_1, A_2, ..., A_N$。
输出格式
一个整数代表答案。
数据范围
对于 $20%$ 的数据,$1 \leq N \leq 20$
对于 $50%$ 的数据,$1 \leq N \leq 10000$
对于 $100%$ 的数据,$1 \leq N \leq 10^5$,$1 \leq A_i \leq 10^9$。所有 $A_i$ 保证不包含前导 $0$。
输入样例:
5
11 121 22 12 2023
输出样例:
1
样例解释
删除 $22$,剩余 $11, 121, 12, 2023$ 是接龙数列。
思路
采用了背包思想,放与不放前提个数字的末位刚好与后一个数字首位相等我们可以选择放也可以选择不放,放则+1,不放则不变,当不等时只有一个选择那就是不放,由于会输入大量数据自定义了一个输入类,这是个死模板死记就行了,当数据量较大时,至少能比普通Scanner快两倍
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.StreamTokenizer;
import java.util.Arrays;
public class Main {
static int n;
static int[][] dp;
static int[] arr;
static class Scanner {
StreamTokenizer streamTokenizer = new StreamTokenizer(new BufferedReader(new InputStreamReader(System.in)));
public int nextInt() throws IOException {
streamTokenizer.nextToken();
return (int) streamTokenizer.nval;
}
}
public static void main(String[] args) throws IOException {
Scanner sc = new Scanner();
n = sc.nextInt();
arr = new int[n];
dp = new int[n + 1][20];
for (int i = 0; i < n; i++) {
arr[i] = sc.nextInt();
}
for (int i = n - 1; i >= 0; i--) {
for (int j = 0; j <= 11; j++) {
if (j == 0) {
dp[i][j] = dp[i + 1][last(arr[i]) + 1] + 1;
dp[i][j] = Math.max(dp[i + 1][j], dp[i][j]);
}
if (j != 0 && j == first(arr[i]) + 1) {
dp[i][j] = Math.max(dp[i + 1][last(arr[i]) + 1] + 1, dp[i][j]);
dp[i][j] = Math.max(dp[i + 1][j], dp[i][j]);
}
dp[i][j] = Math.max(dp[i + 1][j], dp[i][j]);
}
}
System.out.println(n - dp[0][0]);
}
private static int first(int a) {
int b = 0;
while (a != 0) {
b = a % 10;
a /= 10;
}
return b;
}
private static int last(int a) {
return a % 10;
}
}
热门推荐
《女医明妃传》热映,揭秘谈允贤的七白膏美容法
胃部不适怎么办?教你识别和应对功能性消化不良
八成国人胃病困扰,专家推荐科学饮食方案
意式黑醋邂逅牛肋排:高端餐厅里的创意美食
北部湾沉船真相:中俄军演靶船揭秘
“911”后美国发动阿富汗战争:一场军工复合体主导的悲剧
电动机与变压器的核心秘密:涡流影响
萝卜香菇同食有益健康,特殊人群需谨慎
火爆!广州多个地方订满,地铁20元可24小时内畅行
春节海南旅游攻略:7天玩转海口三亚,预算全解析
育儿达人教你培养宝宝五大好习惯
12年陈酿成就独特风味,解密意大利摩德纳巴尔萨米可醋
从贵族餐桌到健康饮食新宠:摩德纳黑醋全解析
“听吧新征程号角吹响”:<强军战歌>凝聚强军意志
<义勇军进行曲>:从抗战号角到新时代军队精神支柱
营养更均衡!全谷物食品了解一下
营养满分,热量减半:您的健康减肥蔬菜指南
冬季护膝指南:如何预防膝关节滑囊炎?
甲亢治疗新知:MMI vs PTU,谁更胜一筹?
甲亢患者如何应对“社恐”?
麦卡伦威士忌邂逅意大利黑醋:高端餐饮的创新搭配
中医专家推荐:三款药膳配合八项生活建议治胃病
三种风味可选:醋泡花生的家常制作指南
醋泡花生:软化血管降血压,三类人群需谨慎
海口人才落户新政:本科起可申请,最高享3.6万购房补贴
陆氏伤科特色疗法:银质针配合松解手法,肩周炎治疗效果显著
边劳动边成长:福建小学创新开展亲子种植活动
天和小学打造立体化劳动教育体系,培养新时代劳动者
2000平米基地、20种动物:长兴湖小学打造立体劳动教育模式
羑里囚禁成就《周易》:周文王对《易经》的重大贡献