
===动态规划===
yhf_2015
无。。。
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
【poj 1947】 Rebuilding Roads
分类:树形dp题解:设dp[i][j]为以i为根的子树中分离出j个点的最小代价树形dp解题时,一般用子树的信息来更新根,先用dfs搜索,按dfs的顺序从下向上搜索。#include #include #include #include using namespace std;const int maxn = 210;int _first[maxn], _next[maxn]原创 2016-09-03 14:24:37 · 266 阅读 · 0 评论 -
【BZOJ 1076】[SCOI2008]奖励关
思路:二进制状压所有的状态,设f[i][j]f[i][j]表示当前已经从1→i−11\to i-1当中得到状态jj,后面进行选择的最大收益。 转移就是枚举之前的状态,枚举当前出现哪一个元素。 ORZ hzwer代码:#include <iostream>#include <cstdio>#include <algorithm>#include <cstring>using namespac原创 2017-03-31 09:46:21 · 406 阅读 · 0 评论 -
【BZOJ 1044】[HAOI2008]木棍分割
思路:首先二分的答案,算出切m下,最长的一段的最短值。 用动态规划求方案数。 设f[i][j]f[i][j]表示切了ii次,使用到了前jj个木段的方案数。 状态转移方程: f[i][j]=∑f[i−1][k]→(1≤k≤j−1)f[i][j]=\sum f[i-1][k]\to(1\le k\le j-1)且(sum[j]−sum[k]≤ans)(sum[j]-sum[k] \le a原创 2017-02-17 21:59:58 · 326 阅读 · 0 评论 -
【BZOJ 1801】[Ahoi2009]chess 中国象棋
T1 炮(cannon)思路:动态规划。设dp[i][j][k]表示计算到第i行,已经放两个的列有j个,已经放了一个的列有k个,每行可以放0个,1个或2个。分情况讨论:一个都不放,j这一维加一个,代码:#include #include using namespace std;typedef long long ll;ll n, m, ans;ll f[110][11原创 2017-02-03 14:16:17 · 336 阅读 · 0 评论 -
【BZOJ 4282】慎二的随机数列
题目来源:BZOJ 4282思路:题目要求一个数列的最长上升子序列的长度,因为n是整数,所以不难发现在最优的答案里,所有不清楚的数字应该全部出现在其中。很显然的一点是,如果可以的话,在答案序列中出现一个模糊不清的数一定不会比不出现时的答案要差(考虑那一个数最多替换下去一个数)。 因为空的一定要选,就相等价的转换为后面的数都变小了,根据差分的思想,不难想到发生的实质变化就是保证了所有的原创 2016-12-29 12:59:00 · 320 阅读 · 0 评论 -
【期望dp练习】lyk loves jumping
没有提交地址题目描述LYK 发现了 n 个点,它想在这些点上跳来跳去。 具体地,第 i 个点有一个高度 hih_i,当 LYK 踩在这个点上方时,这个点会下降 tit_i,也就是说此时该点高度为 hi−tih_i-t_i,当 LYK 离开该点时,这个点又会恢复到原来的 hih_i。 现在 LYK 每次可以跳到不超过它当前所在点高度的点(当 tit_i=0 时,LYK 可以跳到自己所在的点)原创 2016-12-10 16:53:47 · 450 阅读 · 0 评论 -
【BZOJ 1003】[ZJOI2006]物流运输
思路:首先预处理出cost数组,cost[i][j]表示从第i天到第j天满足这些天所有的条件能跑出来的最短路,如果没有路径,值为inf。 然后用O(n2)O(n^2)的动态规划求出答案。 状态转移方程:f[i]=min{f[j]+cost[j+1][i]∗(i−j)+k}f[i]=min\{f[j]+cost[j+1][i]*(i-j)+k\} 因为一开始不需要转换路径,所以答案为f[n]−k原创 2016-12-29 12:57:53 · 281 阅读 · 0 评论 -
【BZOJ 2424】[HAOI2010]订货
思路:动态规划。 设f[i][j]f[i][j]表示前ii个月,剩余存货量为jj的最小代价。 可以枚举k,表示上个月剩余多少件。 状态转移方程: f[i][j]=min{f[i−1][k]+k∗m+(j+u[i]−k)∗d[i]}f[i][j]=min\{f[i-1][k]+k*m+(j+u[i]-k)*d[i]\} 整理可以得到: f[i][j]=min{f[i−1][k]+k∗(m−原创 2016-12-29 12:47:06 · 258 阅读 · 0 评论 -
【洛谷 1508】 Likecloud-吃、吃、吃
思路数字三角形变式,每个点从上边、左上和右上转移而来。代码#include <iostream>#include <cstdio>using namespace std;const int inf = 1e9;int a1[210][210], f[210][210], n, m;int b1[] = {0,-1,-1,-1,0};int b2[] = {0,0,1,-1,0};boo原创 2016-10-24 19:20:11 · 370 阅读 · 0 评论 -
【洛谷 1855】 榨取kkksc03
思路二维费用背包裸题,注意读入的顺序,上下并不一样。代码#include <bits/stdc++.h>using namespace std;int f[210][210];int main(){ int n, m, t, ans = 0; scanf("%d%d%d", &n, &m, &t); for(int i = 1; i <= n; i ++){原创 2016-10-24 16:54:26 · 274 阅读 · 0 评论 -
【洛谷 1353】 【USACO 08 JAN】 跑步 Running
题意奶牛们打算通过锻炼来培养自己的运动细胞,作为其中的一员,贝茜选择的运动方式是每天进行N(1 <= N <= 10,000)分钟的晨跑。在每分钟的开始,贝茜会选择下一分钟是用来跑步还是休息。 贝茜的体力限制了她跑步的距离。更具体地,如果贝茜选择在第i分钟内跑步,她可以在这一分钟内跑D_i(1 <= D_i <= 1,000)米,并且她的疲劳度会增加1。不过,无论何时贝茜的疲劳度都不能超过M(1原创 2016-10-24 09:24:16 · 607 阅读 · 0 评论 -
【CodeVS 2598】编辑距离问题
题解 设的dp方程类似于最长公共子序列,设dp[i][j]表示成功匹配第一个字符串到i,第二个字符串到j的最小步数。 分析三种操作 1.删除一个元素:dp[i][j] -> dp[i-1][j]+1 表示删除第一个串的第i个元素,让两串匹配成功只需要将第一个串 2.插入一个元素:dp[i][j] -> dp[i][j-1]+1 表示原创 2016-10-12 23:46:28 · 289 阅读 · 0 评论 -
【poj 2264】 Advanced Fruits
题解:最长公共子序列+路径记录设dp[i][j]经典转移,用path[i][j]记录路径,记录公共序列出现的位置,倒着向前找,如果有字符相同并且dp[i][j]是从dp[i-1][j-1]转移过来的,那么这就一定是公共子序列的一部分,记录后输出剩余的部分即可。#include #include #include #include #include using namesp原创 2016-09-03 15:02:05 · 283 阅读 · 0 评论 -
【BZOJ 3711】[PA2014] Druzyny
题目:Description 体育课上,nn个小朋友排成一行(从11到nn编号),老师想把他们分成若干组,每一组都包含编号连续的一段小朋友,每个小朋友属于且仅属于一个组。 第ii个小朋友希望它所在的组的人数不多于d[i]d[i],不少于c[i]c[i],否则他就会不满意。 在所有小朋友都满意的前提下,求可以分成的组的数目的最大值,以及有多少种分组方案能达到最大值。原创 2019-07-25 12:44:18 · 366 阅读 · 0 评论