自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(22)
  • 问答 (2)
  • 收藏
  • 关注

原创 P1164 小A点菜 (类背包问题)

定义f[i][j]为用前i道菜用光j元钱的办法总数,其状态转移方程如下:(1)if(j==第i道菜的价格)f[i][j]=f[i-1][j]+1;(2)if(j>第i道菜的价格) f[i][j]=f[i-1][j]+f[i-1][j-第i道菜的价格];(3)if(j<第i道菜的价格) f[i][j]=f[i-1][j];说的简单一些,这三个方程,每一个都是在吃与不吃之间抉择。若钱充足,办法总数就等于吃这道菜的办法数与不吃这道菜的办法数之和;若不充足,办法总数就只能承袭吃前i-..

2022-02-08 14:11:56 121

原创 617.合并二叉树

1、寻找合适的递归终止条件(合适的终止条件能有效减少代码量以及空间、时间占用量)。2、编写单层递归逻辑。3.确定参数以及返回值。我的代码:TreeNode*dfs(TreeNode*r1,TreeNode*r2){if(r1==NULL&&r2==NULL)returnNULL; //当左、右节点都为NULL是返回。(递归终止条件)TreeNode*b=newTreeNode(0);if(r1&...

2022-02-08 14:06:33 389

原创 105. 从前序与中序遍历序列构造二叉树

思路:递归方法处理;单层递归逻辑:1.判断 遍历到的 每个数组(左、右子树)是否为空,即是否为空节点,若为空,则返回NULL;2.以及判断数组是否仅含一个元素,即是否是叶子节点,若是则返回该节点;3.递归的处理 左、右子 树(如何根据前序、中序序列分割出左、右数组是关键);TreeNode*dfs(vector<int>&inorder,intinl,intinr,vector<int>&preorder,intprel,intpre...

2022-02-08 11:31:49 642

原创 跳跃问题 2 dp,贪心 11-13

dp 思路:规定dp[i]为到达第i个位置的最小步数,dp[i]一定是原来能到达这个位置的最小步数和其他位置能到达这个位置的最小步数加一的最小值(dp[i]=min(dp[i],dp[j]+1)).java写代码的时候要注意初始值为0,所以排除数组长度为1的情况后要判断每一个点的dp值是否为0,如果为0,则设置为dp[i]+1。java代码:代码块class Solution { public int jump(int[] nums) { int length = n...

2021-11-03 21:12:51 149

原创 P1616 疯狂采药——dp 完全背包

#include<stdio.h>#define int long longint max(int a,int b) {return a>b?a:b;}signed main() {int i,j,T,N;scanf("%lld%lld",&T,&N);int t[N],v[N];int dp[N][T+1];for(i=0;i<N;i++) {scanf("%lld%lld",&t[i],&v[i]);}for(j=0;j&

2021-08-09 09:17:23 174

原创 刷题总结 dp

做完分割等和子集,最后一块石块的重量2,目标和,个人觉得01背包问题可应用于:1.求已知的n个物品是否能装满背包(或已知的n 个数中任意个数的和是否能凑成目标和),这类问题理解整个求解过程和求出背包容量(目标和)是关键。dp方程:dp[i][j]=max(dp[i-1][j],dp[i-1][j-w[i]]+w[i].若dp[n]==n则表是能。2.求已知的n个数中任意个数的和凑成目标和的不同方案。dp[i][j]=dp[i-1][j]+dp[i-1][j-nums[i]];3.背包问题原题

2021-08-08 12:44:55 80

原创 2021-08-08目标和问题——动态规划 (leetcood)

dp[i][j]表示在数组nums中前i 个元素(包括第i 个)选取任意元素的和能凑成 j的不同方案。dp[i][j]=dp[i-1][j]+dp[i-1][j-num[i]];//dp[i-1][j]表示不用选第i个元素,前面任取的元素的和就为j的不同方案。dp[i-1][j-nums[i]]表示必需取第i 个元素才能凑成j的不同方案。intfindTargetSumWays(int*nums,intnumsSize,inttarget){inti,j,sum=0;for(i...

2021-08-08 12:20:29 104

原创 01背包问题的应用——dp

#include <stdio.h>int fmax(int a,int b) { return a>b?a:b;}bool canPartition(int* nums, int numsSize){int i,j,sum=0;for(i=0;i<numsSize;i++) { sum+=nums[i];}int t=sum/2;if(sum%2==1)return false;int dp[t+1]={0};for(i=1;i<numsSi...

2021-08-07 20:24:00 83

原创 2021-08-06 不同的⼆叉搜索树

给你一个整数 n ,求恰由 n 个节点组成且节点值从 1 到 n 互不相同的 二叉搜索树 有多少种?返回满足题意的二叉搜索树的种数。示例 1:输入:n = 3输出:5示例 2:输入:n = 1输出:1来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/unique-binary-search-trees著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。d[i]:表示有i 个结点时构成不同二叉搜索数的最大数量

2021-08-06 21:05:15 92

原创 01背包问题——动态规划 8.6

dp[i][j]表示前i 个物品(包括第i 个)在j 容量下所承担的最大价值dp方程:dp[i][j]=max(dp[i-1][j],dp[i-1][j-t[i]]+v[i]) (if(j>=t[i])时#include <stdio.h>int fmax(int a,int b) {return a>b?a:b;}int main() {int i,j,N,T; //N表示物品数量,T表示背包容量scanf("%d%d",&T,&N);int.

2021-08-06 20:58:09 78

原创 P4017 最大食物链计数 拓扑排序思想 dp

原题解:#include<bits/stdc++.h>using namespace std;int n,m,ru[5005],chu[5005],a,b,f[5005],ans;int mp[5005][5005];queue<int> q;int main(){ cin>>n>>m; for(int i=1;i<=m;i++){ scanf("%d%d", &a, &b); ...

2021-08-03 14:17:19 156

原创 迷宫——DFS 递归

#include <stdio.h>#define M 8#define N 8int mg[M+2][N+2] ={ {1,1,1,1,1,1,1,1,1,1},{1,0,0,1,0,0,0,1,0,1}, {1,0,0,1,0,0,0,1,0,1},{1,0,0,0,0,1,1,0,0,1}, {1,0,1,1,1,0,0,0,0,1},{1,0,0,0,1,0,0,0,0,1}, ...

2021-08-02 11:20:23 112

原创 挖地雷问题——DFS

原题解:#include<iostream>#include<cstdio>#include<cmath>#include<string>#include<algorithm>#include<queue>using namespace std;bool f[21][21];//记录是否有路径相连int a[21];//记录地雷数int path[21],ans[21],cnt;//path记录路径,ans记录答案

2021-08-02 08:38:23 233

原创 P2196 挖地雷问题——动态规划 *

有大佬知到为什么吗?题解: 满分定义状态f[i]f[i]为以第ii个节点结束的最大值,则f[i]=max \{ f[j]\}+a[i]\ \ (g[j][i]=1)f[i]=max{f[j]}+a[i](g[j][i]=1)#include <iostream>#include <cstdio>#include <cstring>using namespace std;int n,a[205],g[...

2021-08-01 16:07:01 217

原创 2021-08-01 滑雪问题 解法二 记忆化搜索 (选自洛谷)

本题应该是练习记忆化搜索非常不错的一道题并没有什么花哨的解法233 一个中规中矩的记忆化搜索不明白记忆化搜索的同学看这边:记忆化搜索:因为普通搜索时,我们有时可能会用到之前所搜索到的结果,这时如果我们再次搜索就显得没有必要了(会浪费很多时间呢),所以如果我们已经记录了之前搜索的答案不就可以直接用之前的搜索答案了么举个例子:在求斐波那契数时,我们需要求第i个数,必须先知道i前面两个数,即:f[i]=f[i-1]+f[i-2]如果此时我们要求f[4]那么我们理应求出f[3]和f[2]

2021-08-01 09:00:05 91

原创 2021.7.31做题总结

动态规划问题关键一步就是找出动态转移方程。动态规划具有无后效性,最优子结构,重复子问题三个特性。找零钱,滑雪考虑无后效性利用动态转换方程从小问题推至大问题。数字金字塔是从开始点推至结束点。...

2021-08-01 08:56:32 81

原创 快速排序算法 7.31

#include <stdio.h>int pari(int a[],int l,int r) { int i=l,j=r; int tem=a[i]; //选取基准 while(i<j) { while(i<j&&a[j]>=tem)j--; //从右到左访问 a[i]=a[j]; while(i<j&&a[i]<=tem)i++; //从左到右访问...

2021-07-31 17:10:43 100

原创 P1434 滑雪问题——动态规划 7.31

解题思路:考虑到动态规划无后效性的特点,必须先从较低点算至较高点。利用优先队列(或排好序的队列)依次去处理各个高度。动态转换方程:f[i][j]=max(f[i-1][j],f[i][j+1],f[i+1][j],f[i][j-1])+1#include <stdio.h>typedef struct { //用以保存各个高度的信息int now;int i;int j;}box;int max(int a,int b) {return a>b?a:b;}.

2021-07-31 17:05:46 411

原创 P1216 数字三角形——动态规划 7.30

#include<stdio.h>int max(int a,int b) { //计算a,b两数中最大值if(a>b)return a;elsereturn b;}int main() {int i,j,N;scanf("%d",&N);int a[N][N]={-100}; //用以保存金字塔中的数int dp[N][N]={0}; //保存最大路径和for(i=0;i<N;i++) for(j=0;j<=i;j++...

2021-07-30 18:59:25 82

原创 找零钱问题——动态规划 7.30

#include <stdio.h>int main() { int i,j,N1,N2; scanf("%d%d",&N1,&N2);//N1表示N1种不同已有的钞票,N2表示需要兑换的钞票值 int dp[N2+1]; for(i=0;i<N2+1;i++) dp[i]=-1; //表示金额 i 还未计算出最优解 int coins[N1]; for(i=0;i<N1;i++)//输入N1种不同的钞票...

2021-07-30 18:47:32 114

原创 归并排序——错误总结 7.30

#include<stdio.h>#include<malloc.h>void merge(int A[],int l,int m,int r){ int *t; t=(int *)malloc((r-l+1)*sizeof(int)); //动态分配内存 int r1,l1; int b=0;//b的初始值应该为0,之前一直编译错误的原因就是让b值为l,造成数组t越界,导致最后错误,谨记! r1=m+1; l1=l;...

2021-07-30 16:26:18 479

原创 2021-07-20

今天开始刷字符串类型的题目,为了ACM,加油!!总结:1.字符型整数值范围0~127 越界就会乱码。

2021-07-20 16:05:46 66

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除