力扣动态规划-4【算法学习day.98】
前言
###我做这类文章一个重要的目的还是给正在学习的大家提供方向(例如想要掌握基础用法,该刷哪些题?建议灵神的题单和代码随想录)和记录自己的学习过程,我的解析也不会做的非常详细,只会提供思路和一些关键点,力扣上的大佬们的题解质量是非常非常高滴!!!
习题
1.删除并获得节点
题目链接:740. 删除并获得点数 - 力扣(LeetCode)
题面:
附上宫水大佬代码:
class Solution {
int[] cnts = new int[10010];
public int deleteAndEarn(int[] nums) {
int n = nums.length;
int max = 0;
for (int x : nums) {
cnts[x]++;
max = Math.max(max, x);
}
// f[i][0] 代表「不选」数值 i;f[i][1] 代表「选择」数值 i
int[][] f = new int[max + 1][2];
for (int i = 1; i <= max; i++) {
f[i][1] = f[i - 1][0] + i * cnts[i];
f[i][0] = Math.max(f[i - 1][1], f[i - 1][0]);
}
return Math.max(f[max][0], f[max][1]);
}
}
2.统计放置房子的方式数
题目链接:2320. 统计放置房子的方式数 - 力扣(LeetCode)
题面:
代码:
class Solution {
int[][] flag;
int mod = (int)1e9 + 7;
public int countHousePlacements(int n) {
flag = new int[n+1][2];
flag[0][1] = 1;
flag[0][0] = 1;
for(int i = 1;i<n;i++){
flag[i][0] = (flag[i-1][0]+flag[i-1][1])%mod;
flag[i][1] = flag[i-1][0];
}
long ans = (flag[n-1][0] + flag[n-1][1])%mod;
long f = (ans*ans)%mod;
return (int)f;
}
}
后言
上面是动态规划相关的习题,共勉
原文地址:https://blog.csdn.net/2301_79232523/article/details/145242322
免责声明:本站文章内容转载自网络资源,如侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!