![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
动态规划
GaoJieVery6
这个作者很懒,什么都没留下…
展开
-
hdu 2546 动态规划 DP
比较水,需要先做一些预处理。为了让卡里最终的钱最少,我们肯定会在条件允许的情况下(卡里的余额大于五)最后买最贵的菜,这样,我们先把初始余额减5,然后把最贵的菜挑出去,考虑用初始余额减5的钱买剩下的菜,使最终余额>0且最少,然后再把这个余额减最贵的菜钱就是答案。状态转移方程 dp[ i ][ j ] = min( dp[ i-1 ][ j ], dp[ i-1 ][ j-a[ i ] ]-...原创 2018-03-16 20:24:14 · 190 阅读 · 0 评论 -
hdu 1114 完全背包 动态规划
#include <iostream> #include <cstdio> #include <cstdlib> #include <algorithm> #include <cstring> using namespace std; const int INF = 1000000000; int dp[1000000], v[1000...原创 2018-03-16 21:29:07 · 299 阅读 · 0 评论 -
hdu 2191 多重背包 动态规划
主要思想是把同一种的k个物品转化为k个编号不同的物品,然后用01背包来做。#include <iostream> #include <cstdio> #include <cstdlib> #include <algorithm> #include <cstring> using namespace std; const int INF ...原创 2018-03-16 23:02:31 · 172 阅读 · 0 评论 -
UVa 1625 动态规划
需要注意c[i][j]的递推算法和sp,sq,ep,eq的赋初值。由于dp[i][j]表示第一个字符串取i个,第二个字符串取j个,所以不论dp[i][j]从dp[i-1][j]+c[i-1][j]来的还是从dp[i][j-1]+c[i][j-1]来的,都可以在保证i != 0的情况下用c[i][j] = c[i-1][j] +/- 1 或0来算。#include<iostream> ...原创 2018-07-08 14:26:16 · 201 阅读 · 0 评论 -
uva 1627 动态规划,01背包,二分图染色
主要思路是大白书上的,利用二分图染色判断是不是no solution,二分图染色的那个函数就是judge和dfs,然后dp[i][j]==1表示把第i个二分图的一部分加入第一队后,第一队有j人,dp[i][j] == 0 表示把第i个联通块加入第一队后,第一队的人数不可能是j人,显然,设有m个联通块,n个人,那么如果有最优解,最优解就是dp[m][j]中j最接近n/2的。way[][]数组用来保存...原创 2018-07-09 13:34:54 · 172 阅读 · 0 评论 -
uva 1336 修长城 动态规划
dynamic(i, j, k)中i代表已修好的部分的左端点,j代表已修好的部分的右端点, k==0代表此时机器人在i点, k==1代表此时机器人在j点。如果k = 0, 那么机器人一定是修好i+1到j的所有点,再到i点修好了i点处的缺口,所以k=0时的转移方程为dynamic(i, j, 0) = min(dynamic(i+1, j, 0) + 代价, dynamic(i+1, j, 1) +...原创 2018-07-10 19:27:27 · 248 阅读 · 0 评论 -
UVa 1218 树形DP
思路主要是紫书 上的,我在这里说一下建树的细节。 #include <vector> #include <cstdio> #include <algorithm> #include <cstring> #include <set> using namespace std; vector<int> son[100...原创 2018-02-25 19:03:39 · 151 阅读 · 0 评论