|----线性
yhf_2015
无。。。
展开
-
【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 · 263 阅读 · 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 · 309 阅读 · 0 评论 -
【BZOJ 4282】慎二的随机数列
题目来源:BZOJ 4282 思路: 题目要求一个数列的最长上升子序列的长度,因为n是整数,所以不难发现在最优的答案里,所有不清楚的数字应该全部出现在其中。很显然的一点是,如果可以的话,在答案序列中出现一个模糊不清的数一定不会比不出现时的答案要差(考虑那一个数最多替换下去一个数)。 因为空的一定要选,就相等价的转换为后面的数都变小了,根据差分的思想,不难想到发生的实质变化就是保证了所有的原创 2016-12-29 12:59:00 · 295 阅读 · 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 · 259 阅读 · 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 · 240 阅读 · 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 · 342 阅读 · 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 · 247 阅读 · 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 · 571 阅读 · 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 · 271 阅读 · 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 · 288 阅读 · 0 评论