动态规划、贪心
DP
Alan_Lowe
世上没有白走的路,每一步都算数!——狂神
展开
-
汉诺塔II|汉诺塔4柱
汉诺塔来源于印度传说的一个故事,上帝创造世界时作了三根金刚石柱子,在一根柱子上从下往上按大小顺序摞着64片黄金圆盘。并且规定,在小圆盘上不能放大圆盘,在三根柱子之间一回只能移动一个圆盘。Gardon是个怕麻烦的人(恩,就是爱偷懒的人),很显然将64个圆盘逐一搬动直到所有的盘子都到达第三个柱子上很困难,所以Gardon决定作个小弊,他又找来了一根一模一样的柱子,通过这个柱子来更快的把所有的盘子移到第三个柱子上。很显然,在没有第四个柱子时,问题的解是2^N-1,但现在有了这个柱子的帮助,又该是多少呢?...原创 2022-07-22 18:40:48 · 1349 阅读 · 0 评论 -
Strange Towers of Hanoi|汉诺塔4柱问题
链接https//ac.nowcoder.com/acm/problem/50921。原创 2022-07-22 14:31:16 · 229 阅读 · 0 评论 -
传纸条【动态规划】
传纸条 动态规划原创 2022-06-22 15:46:32 · 230 阅读 · 0 评论 -
花店橱窗布置【动态规划】
动态规划 花店橱窗布置原创 2022-06-22 13:50:36 · 353 阅读 · 0 评论 -
Supermarket | 贪心 + 优先队列
Supermarket | 贪心from poj 1456from acwing 145时间限制 :2s内存限制:65MDescription:A supermarket has a set Prod of products on sale. It earns a profit px for each product x∈Prod sold by a deadline dx that is measured as an integral number of time units starti原创 2021-02-02 20:28:52 · 220 阅读 · 0 评论 -
Supermarket | 贪心 + 并查集
Supermarket | 贪心 + 并查集from poj 1456from acwing 145时间限制 :2s内存限制:65MDescription:A supermarket has a set Prod of products on sale. It earns a profit px for each product x∈Prod sold by a deadline dx that is measured as an integral number of time units原创 2021-02-03 01:11:50 · 240 阅读 · 0 评论 -
Supermarket | 贪心
Supermarket | 贪心from poj 1456from acwing 145时间限制 :2s内存限制:65MDescription:A supermarket has a set Prod of products on sale. It earns a profit px for each product x∈Prod sold by a deadline dx that is measured as an integral number of time units starti原创 2021-02-03 00:47:31 · 275 阅读 · 2 评论 -
合并 果子
合并果子from acwing 148时间限制:1s空间限制:64MB简单贪心。AC代码#include<bits/stdc++.h>using namespace std;#define int long long#define start ios::sync_with_stdio(false),cin.tie(0),cout.tie(0)int n,sum,x,y;priority_queue<int,vector<int>,greater<原创 2021-07-02 17:31:37 · 76 阅读 · 0 评论 -
区间合并【简单贪心】acwing803
区间合并【简单贪心】acwing803将所有区间进行排序,按照左端点从小到大、右端点从小到大的优先级排序,然后遍历判断每一个区间是否能和前面的区间合并即可。ac代码:#include<bits/stdc++.h>using namespace std;#define int long long#define pii pair<int,int>#define IOS ios::sync_with_stdio(false),cin.tie(0),cout.tie(0);原创 2021-10-08 21:07:30 · 97 阅读 · 0 评论 -
Fight against involution | 2020ICPC济南D
Fight against involutionfrom 2020ICPC济南Time limit:1sMemory limit:256MB题意:在满足每个人成绩不减的前提下,找到最小的wi的总和。贪心,因为每个人最开始的时候都是想着把自己的字数写到最多(wi = Ri)我们可以将每个人按照Ri升序排列,Ri相同按照Li降序,这样每个人都比后面的人字数少,但是我们想要将wi的总和降到最低,并且每个人wi大于等于前一个人并且小于等于后一个人。从1到n遍历每个人,用mx记录前面的人字原创 2021-04-28 17:53:15 · 244 阅读 · 1 评论 -
Box Fitting | Codeforces
Box Fittingfrom Codeforces Round #711 (Div. 2)Time limit:1s*Memory limit:256MBac代码:#include<cstdio>#include<algorithm>#include<set>#include<queue>using namespace std;int t,n,w;void solve(){ multiset<int> s原创 2021-03-30 10:07:06 · 307 阅读 · 2 评论 -
Partial Replacement | Codeforces
Partial Replacementfrom Codeforces Round #710 (Div. 3)Time limit:2sMemory limit:256MB简单的贪心思想,把第一个星号和最后一个星号标记好了以后,中间利用贪心思想,隔得越远越好。ac代码:#include<iostream>#include<string>using namespace std;long long t,n,k,notepre = -1,noterear = n,原创 2021-03-26 22:38:40 · 295 阅读 · 0 评论 -
acwing320能量项链【区间dp】
acwing320能量项链【区间dp】利用区间dp,注意考虑起始位置就行了,我是用了一个pair数组,first存起点,second存终点:#include "bits/stdc++.h"using namespace std;#define int long long#define IOS ios::sync_with_stdio(false),cin.tie(0),cout.tie(0);int n;int dp[205][205]; //记录区间最小pair<int原创 2021-09-07 19:55:49 · 96 阅读 · 0 评论 -
acwing282.石子合并【区间dp】
acwing282.石子合并【区间dp】#include "bits/stdc++.h"using namespace std;#define int long long#define IOS ios::sync_with_stdio(false),cin.tie(0),cout.tie(0);int n;int dp[305][305]; //记录区间最小int num[305]; //数列int pre[305]; //前缀和inl原创 2021-09-07 19:14:30 · 128 阅读 · 0 评论 -
洛谷P1880【NOI995】石子合并|区间DP
洛谷P1880【NOI995】石子合并区间dp经典题目话不多说上代码:#include "bits/stdc++.h"using namespace std;#define int long longint n;int st[205]; //记录每一堆stone的数量int mx[205][205]; //存储最大得分状态int mn[205][205]; //存储最小得分状态int pre[205]; //前缀和void init(){ c原创 2021-09-04 10:33:54 · 96 阅读 · 0 评论 -
Common Subsequence-HDU1159
Common Subsequence-HDU1159#include<bits/stdc++.h>using namespace std;#define IOS ios::sync_with_stdio(false),cin.tie(0),cout.tie(0)#define int long longstring s1,s2; //输入的两个字符串int l1,l2; //s1,s2的长度int dp[1005][1005]; //存储状态v原创 2021-08-21 20:35:49 · 108 阅读 · 3 评论 -
Advanced Fruits-HDU1503
Advanced Fruits-HDU1503#include<bits/stdc++.h>using namespace std;#define IOS ios::sync_with_stdio(false),cin.tie(0),cout.tie(0)#define int long long#define pii pair<int,int>string s1,s2,s; //输入的两个字符串和结果int l1,l2; //s1,s2的长原创 2021-08-21 15:59:14 · 111 阅读 · 0 评论 -
Super Jumping! Jumping! Jumping!-HDU1087
Super Jumping! Jumping! Jumping!-HDU1087求上升子序列的和的最大值#include<bits/stdc++.h>using namespace std;#define IOS ios::sync_with_stdio(false),cin.tie(0),cout.tie(0)#define int long longint sum,n;int x[1005],dp[1005];void solve(){ sum = 0; f原创 2021-08-21 11:20:54 · 102 阅读 · 0 评论 -
Max Sum-HDU1003
Max Sum-HDU1003#include<bits/stdc++.h>using namespace std;#define IOS ios::sync_with_stdio(false),cin.tie(0),cout.tie(0)#define int long longint to,sum,n;int dp[100005];int from[100005];void solve(){ cin>>n; to = 0; sum = -原创 2021-08-21 10:50:04 · 104 阅读 · 0 评论 -
折线分割平面 HDU2050
折线分割平面 HDU2050折线我们可以看成两条线段,每条线段和其他的线段相交会增加一个部分,而这条折线的两条线段又会形成一个部分(图中的5),即dp[n] = dp[n - 1] + 4(n-1) + 1 = dp[n - 1] + 4n - 3代码:#include<bits/stdc++.h>using namespace std;#define IOS ios::sync_with_stdio(false),cin.tie(0),cout.tie(0)#defin原创 2021-08-20 17:11:57 · 141 阅读 · 0 评论 -
一只小蜜蜂 HDU2044
一只小蜜蜂 HDU2044每一步都可以加1或者加2,那么走到b的时候应该是b-1和b-2加起来,即递推方程是dp[b] = dp[b-1]+dp[b-2]#include<bits/stdc++.h>using namespace std;#define IOS ios::sync_with_stdio(false),cin.tie(0),cout.tie(0)#define int long longint a,b;void solve(){ cin>>a&原创 2021-08-20 16:56:18 · 89 阅读 · 0 评论 -
母牛的故事 HDU2018
母牛的故事 HDU2018递推,这一年新生下的牛,应该是三年前的牛的头数。#include<bits/stdc++.h>using namespace std;#define IOS ios::sync_with_stdio(false),cin.tie(0),cout.tie(0)int x[60],tt; //tt存储第几年,x存储第几年应该有几头牛void solve(){ for(int i = 5;i <= tt;++i) x[i原创 2021-08-20 16:41:37 · 107 阅读 · 2 评论 -
数塔 HDU2084
数塔 HDU2084#include<bits/stdc++.h>using namespace std;#define IOS ios::sync_with_stdio(false),cin.tie(0),cout.tie(0)int x[100][100]; //存储数塔int len; //高度void solve(){ cin>>len; for(int i = 1;i <= len;++i) f原创 2021-08-20 15:14:40 · 74 阅读 · 0 评论 -
连续子数组的最大和
连续子数组的最大和class Solution {public: int maxSubArray(vector<int>& nums) { int ans = nums[0]; for(int i = 1,j = nums.size();i < j;++i){ nums[i] = max(nums[i],nums[i] + nums[i - 1]); ans = max(ans,nums[原创 2021-08-20 15:01:39 · 90 阅读 · 2 评论 -
leetcode 5. 最长回文子串
leetcode [5. 最长回文子串](https://leetcode-cn.com/problems/median-of-two-sorted-arrays/)给你一个字符串 s,找到 s 中最长的回文子串。动态规划法求解最大回文串。class Solution {public: string longestPalindrome(string s) { bool dp[1005][1005]; //存储状态 int len = s.length原创 2021-06-28 01:28:44 · 128 阅读 · 0 评论 -
CF509A Maximum in Table
CF509A Maximum in Tablefrom CF509A Maximum in Table - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)时间限制:2s空间限制:250MB简单的递推。一维:#include<bits/stdc++.h>using namespace std;int n;int x[15];int main(){ cin>>n; for(int i = 1;i <= n;++i)原创 2021-06-24 21:53:17 · 100 阅读 · 0 评论 -
最长公共子序列
最长公共子序列from acwing 897时间限制:1s空间限制:64MB题目描述:给定两个长度分别为 N 和 M 的字符串 A 和 B,求既是 A 的子序列又是 B 的子序列的字符串长度最长是多少。输入格式:第一行包含两个整数 N 和 M。第二行包含一个长度为 N 的字符串,表示字符串 A。第三行包含一个长度为 M 的字符串,表示字符串 B。字符串均由小写字母构成。输出格式:输出一个整数,表示最大长度。数据范围:1≤N,M≤1000输入样例:4 5acbdabed原创 2021-05-24 19:40:12 · 227 阅读 · 1 评论 -
多重背包问题2 | 二进制拆分
多重背包问题2from acwing 5时间限制:1s空间限制:64MB题目描述:有 N 种物品和一个容量是 V 的背包。第 i 种物品最多有 si 件,每件体积是 vi,价值是 wi。求解将哪些物品装入背包,可使物品体积总和不超过背包容量,且价值总和最大。输出最大价值。输入格式:第一行两个整数,N,V,用空格隔开,分别表示物品种数和背包容积。接下来有 N 行,每行三个整数 vi,wi,si,用空格隔开,分别表示第 i 件物品的体积、价值和数量。输出格式:输出一个整数,表示最大原创 2021-02-03 21:21:19 · 896 阅读 · 0 评论 -
多重背包问题1
多重背包问题1from acwing 4时间限制:1s空间限制:64MB题目描述:有 N 种物品和一个容量是 V 的背包。第 i 种物品最多有 si 件,每件体积是 vi,价值是 wi。求解将哪些物品装入背包,可使物品体积总和不超过背包容量,且价值总和最大。输出最大价值。输入格式:第一行两个整数,N,V,用空格隔开,分别表示物品种数和背包容积。接下来有 N 行,每行三个整数 vi,wi,si,用空格隔开,分别表示第 i 件物品的体积、价值和数量。输出格式:输出一个整数,表示最大原创 2021-02-03 12:46:10 · 234 阅读 · 0 评论 -
完全背包问题
完全背包问题from acwing 3时间限制:1s空间限制:64MB题目描述:有 N 种物品和一个容量是 V 的背包,每种物品都有无限件可用。第 i 种物品的体积是 vi,价值是 wi。输入格式:第一行两个整数,N,V,用空格隔开,分别表示物品数量和背包容积。接下来有 N 行,每行两个整数 vi,wi,用空格隔开,分别表示第 i 件物品的体积和价值。输出格式:输出一个整数,表示最大价值。数据范围:0 < N,V <= 10000 < vi,wi <=原创 2021-02-03 11:57:54 · 145 阅读 · 2 评论 -
01背包问题
01背包问题from acwing 2时间限制:1s空间限制:64MB题目描述:有 N 件物品和一个容量是 V 的背包。每件物品只能使用一次。第 i 件物品的体积是 vi,价值是 wi。求解将哪些物品装入背包,可使这些物品的总体积不超过背包容量,且总价值最大。输出最大价值。输入格式:第一行两个整数,N,V,用空格隔开,分别表示物品数量和背包容积。接下来有 N 行,每行两个整数 vi,wi,用空格隔开,分别表示第 i 件物品的体积和价值。输出格式:输出一个整数,表示最大价值。数原创 2021-02-03 11:34:49 · 185 阅读 · 0 评论