![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
DP例题
只会写臭虫
这个作者很懒,什么都没留下…
展开
-
洛谷 P1025 数的划分+【POJ - 1664】放苹果(dp)
dp[n][m]表示将n划分为m组的方案数,该状态可能有两种情况:①至少有一组的数等于1,所以他的上一个状态是: dp[i-1][j-1]②每一组的数都大于1,所以他的上一个状态是每一组数减1:dp[i-j][j]#include <stdio.h>#include <string.h>#include <cmath>#include <alg...原创 2019-07-02 02:15:18 · 167 阅读 · 0 评论 -
918. 环形子数组的最大和
解法1:可以将这个数组复制一段接在原数组的后面,然后分别从1到n开始,进行普通子数组最大和的解法。但是这样时间复杂度为n^2。这题的数据量是30000,显然不行,所以应该考虑nlogn或者n的解法。解法2:分成两种情况,一是没有首尾相连,就用正常求最大子数组和的方法。二是有首尾相连的情况,那么这种情况的解法就是将数组求和减去其中一段最小子数组和,但是这种需要考虑一种特殊情况,就是加入数组都小...原创 2019-07-28 00:02:32 · 216 阅读 · 0 评论 -
哈深夏令营机试题1:n个色子的点数之和为m的概率计算
实际就是求n个色字点数之和为m的组合数。动态规划:转移方程:dp[i][j]=dp[i-1][j-6] + dp[i-1][j-5] +dp[i-1][j-4]+dp[i - 1][j - 3] +dp[i-1][j-2] +dp[i-1][j-1]边界条件是:dp[0][0]=1;代码:#include<iostream>#include<cstdio>...原创 2019-07-18 00:11:23 · 977 阅读 · 1 评论 -
LeetCode123. 买卖股票的最佳时机 III
定义dp[n][k][m],表示第n天结束后,状态为m,已经购买的股票数为k。m=1表示持有股票,m=0表示当前不持有股票。k的取值为0,1,2。写的时候迷迷糊糊的,感觉还是没有掌握精髓。。。。代码:class Solution {public: int dp[100000][3][2]; int min_int = -2000000000; //不存你在的状态设置为很小,...原创 2019-06-30 20:09:04 · 263 阅读 · 0 评论 -
结点选择(树形DP)
从任一根节点开始dfs,其中fy维护选择当前节点时对应的最大权值,fn维护不选择当前节点时对应的最大权值,最后返回fy[根]与fn[根]的最大值即可。#include <stdio.h>#include <string.h>#include <algorithm>#include <iostream>#include<vector&g...原创 2019-06-29 14:05:17 · 238 阅读 · 0 评论 -
LeetCode 322. 零钱兑换(完全背包问题(DP)或DFS)
dp解法:class Solution {public: int dp[1000000]; int coinChange(vector<int>& coins, int amount) { for(int i=1;i<=amount;i++){ dp[i]=2000000000; for...原创 2019-06-28 21:36:19 · 389 阅读 · 0 评论 -
矩形嵌套问题(DP)
题目来自:NYOJ - 矩形嵌套有n个矩形,每个矩形可以用a,b来描述,表示长和宽。矩形X(a,b)可以嵌套在矩形Y(c,d)中当且仅当a<c,b<d或者b<c,a<d(相当于旋转X90度)。例如(1,5)可以嵌套在(6,2)内,但不能嵌套在(3,4)中。你的任务是选出尽可能多的矩形排成一行,使得除最后一个外,每一个矩形都可以嵌套在下一个矩形内。输入第一行是一个正正数...原创 2019-06-28 20:57:16 · 1201 阅读 · 1 评论 -
求N*M矩阵中的最大子矩阵和(DP)
题目来自2018南京大学夏令营机试第一题。计算过程如下图所示:就是固定矩阵的上边界,每一次计算的时候将相同列值相加,构成一个新的数组,然后对这个数组求最大连续和。时间复杂度为nnm值得指出的是,原博客中有两个问题:①最大值的初始值应该设置为无穷小,而不是0,因为可能子矩阵之和最大值为负数。②maxsub(arr, m)函数传入的参数应该是矩阵列数m,而不是行数n参考博客:https:/...原创 2019-07-04 00:31:58 · 3477 阅读 · 0 评论 -
LeetCode 39. 组合总和(回溯) +LeetCode 40. 组合总和 II(回溯)+216. 组合总和 III(回溯)+377. 组合总和 Ⅳ(dp)
普通的dfs回溯:class Solution {public: vector< vector<int> > ans; void dfs(vector<int>& candidates,int target,vector<int> tmp,int idx){ if(target<0) ...原创 2019-07-02 17:14:37 · 183 阅读 · 0 评论 -
字符串交错组成(牛客网,动态规划)
对于三个字符串A,B,C。我们称C由A和B交错组成当且仅当C包含且仅包含A,B中所有字符,且对应的顺序不改变。请编写一个高效算法,判断C串是否由A和B交错组成。给定三个字符串A,B和C,及他们的长度。请返回一个bool值,代表C是否由A和B交错组成。保证三个串的长度均小于等于100。测试样例:“ABC”,3,“12C”,3,“A12BCC”,6返回: true思路: 设dp[i][j]为...原创 2019-08-17 15:42:22 · 628 阅读 · 0 评论