一共4题,第一题简单,第二题一般,第三四题困难
多少天回本(简单)
买个月卡需要m块,登陆一天送n块,求多少天回本
1
| return parseInt((m + n - 1) / n);
|
最大分割和(一般)
对一个n位的十进制数进行分割,分割后每个数不能大于99,求分割后的最大值
如:12345 -> 1 + 23 + 45 = 69
思路
- 使用动态规划思想
- dp[i]表示str[0]到str[i]所能分割的最大和
- 状态转移方程
1 2 3 4
| dp[i] = max( dp[i - 1] + parseInt(str.slice(i, i + 1)), dp[i - 2] + parseInt(str.slice(i - 1, i + 1)), );
|
- 初始状态dp[0]=parseInt(str.slice(0, 1)), dp[1]=parseInt(str.slice(0, 2))
code
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
| const rl = require("readline").createInterface({ input: process.stdin }); var iter = rl[Symbol.asyncIterator](); const readline = async () => (await iter.next()).value;
const fn = (str) => { const l = str.length; if (l <= 2) { return parseInt(str); }
const dp = [parseInt(str.slice(0, 1)), parseInt(str.slice(0, 2))]; for (let i = 2; i < l; i++) { let best = Math.max( dp[i - 1] + parseInt(str.slice(i, i + 1)), dp[i - 2] + parseInt(str.slice(i - 1, i + 1)), ); dp.push(best); } return dp.at(-1); };
void (async function () { let str = await readline(); console.log(fn(str)); process.exit(0); })();
|