学习更新2021年10月
作者:互联网
2021-10-19
一本通 1264:【例9.8】合唱队形
一本通的题,想明白了很简单,想不明白比较复杂。就是从左到右是升序子序列,而从右边到左也是升序子序列。两个dp数组,一个从左到右计算最大升序子序列。一个从右往左计算最大升序子序列。最后做一个合并。看每个位置dp1[i]+dp2[i] 的最大值,减去重复的i位置的值,就是最大值了。
public int res(int[] t) {
int dp1[] = new int[t.length];
int dp2[] = new int[t.length];
for (int i = 0; i < t.length; i++) {
dp1[i] = 1;
for (int j = 0; j < 1; j++) {
if (t[i] > t[j]) {
dp1[i] = Math.max(dp1[j] + 1, dp1[i]);
}
}
}
for (int i = t.length - 1; i >= 0; i--) {
dp2[i] = 1;
for (int j = t.length - 1; j > i; j--) {
if (t[i] > t[j]) {
dp2[i] = Math.max(dp2[j] + 1, dp2[i]);
}
}
}
int max = 1;
for (int i = 0; i < t.length; i++) {
max = Math.max(dp1[i] + dp2[i], max);
}
System.out.println(max-1);
return max - 1;
}
标签:10,dp2,dp1,int,max,更新,length,2021,升序 来源: https://www.cnblogs.com/mxjhaima/p/15423103.html