前端动态规划
没办法了,动态规划绕不过去了,那就搞懂吧。
HJ24 合唱队 - 中等
var num;
while(num = parseInt(readline())){
const arr = readline().split(' ').slice(0,num).map(n => parseInt(n));
let dp1 = handle(arr);
let dp2 = handle(arr.reverse()).reverse();
let max = 0;
for (let i = 0; i<dp1.length; i++){
max = Math.max(max, dp1[i]+dp2[i]-1);
}
console.log(arr.length - max);
}
function handle(arr) {
const dp = [];
for (let i = 0; i<arr.length; i++) {
dp[i] = 1;
for (let j = 0; j <i; j++) {
if (arr[j] < arr[i]) {
dp[i] = Math.max(dp[i], dp[j]+1);
}
}
}
return dp;
}
HJ32 密码截取 - 简单,可以有其他方法
const line = readline();
const dp = [];
let max = 0;
for (let i = 0; i < line.length; i++){
dp[i] = 1;
for (let j = 0; j <=i; j++){
let str = line.slice(j, i+1);
if (check(str)) {
dp[i] = Math.max(dp[i], str.length);
max = Math.max(max, dp[i]);
}
}
}
console.log(max)
function check(str) {
let i,j;
if (str.length %2 ===0) {
i = str.length/2-1;
j = str.length/2;
} else {
i = (str.length-1)/2;
j = i;
}
while (i >=0 && j<str.length) {
if (str[i] === str[j]) {
i--;j++
} else {
return false;
}
}
return true;
}
HJ75 公共子串计算 - 简单,可以有其他方法
const line = readline();
const line2 = readline();
let short, long;
if (line.length >= line2.length) {
short = line2;
long = line;
} else {
short = line;
long = line2;
}
let dp = [];
let max = 0;
for (let i = 0; i < short.length; i++){
dp[i] = 0;
for (let j = 0; j <= i; j++) {
let str = short.slice(j,i+1);
if (long.indexOf(str) > -1) {
dp[i] = Math.max(str.length, dp[i]);
max = Math.max(max, dp[i])
}
}
}
console.log(max);
HJ52 计算字符串的编辑距离 - 难

浙公网安备 33010602011771号