DP
哒哒哒哒哒嘭
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
CodeForces - 429B
思路 取四个角到某一点的距离的最大值 对角即为一个人的路线 其中#include<bits/stdc++.h> typedef long long ll; const int maxn=1010; ll dp1[maxn][maxn],dp2[maxn][maxn],dp3[maxn][maxn],dp4[maxn][maxn]; ll a[1010][1010]; using...原创 2018-05-09 22:41:58 · 252 阅读 · 0 评论 -
Shopping Offers 状态压缩DP+背包
思路:一种商品最多能买5个所以可以用六进制数表示 状态压缩DP 转化成背包问题 一种组合看作一个新的类型的物品#include<cstdio> #include<iostream> #include<algorithm> #include<cstring> #define inf 0x3f3f3f3f3f using namespace std; ...原创 2018-05-21 22:51:23 · 235 阅读 · 0 评论 -
牛客练习赛24 三轮 dp
5W的数据范围没想到背包能过 惊了 dp[j+x]=dp[j]+dp[j+x]; x为物品体积 dp[x]为x体积下 的方案数 #include<bits/stdc++.h> using namespace std; int dp[100010]; int main(){ int n,m; cin>>n>>m; int x;dp[0]=1; ...原创 2018-08-11 13:08:25 · 212 阅读 · 0 评论 -
Color Length UVA - 1625 dp
紫书上的代码 其中运用了滚动数组 (i-1,j) (0,j) (i,j-1) (1,j-1) (i, j) (1,j-1) (i,j+1) (i+1,j-1) (i+1,j) 其中(i+1,j)要用上和左的数据 所以t 在每一行的循环结尾要 t^=1才能使用到上一行1的数据 #include<cs...原创 2018-08-28 20:45:34 · 213 阅读 · 0 评论 -
POJ1651 dp 最优矩阵链乘
dp[i][j] i j代表矩阵的边 dp[i][j]等于乘法次数 状态转移:dp[i][j]=min(dp[i][k]+dp[k][j]+p[i]*p[k]*p[j]) #include<cstdio> #include<iostream> #include<cstring> using namespace std; int a[105]; in...原创 2018-08-28 21:32:18 · 270 阅读 · 0 评论 -
Party at Hali-Bula UVA - 1220 树的最大独立集
紫书dp #include<bits/stdc++.h> using namespace std; int n; int cnt=0; int d[205][3],f[205][3];//d(u,0) f(u,0)标志以u为根的子树中不选u点所能得到的最大人数以及方案的唯一性 f(u,0)=k k==1唯一 0不唯一而d(u,1) f(u,1)则是取u点的最大人数 v...原创 2018-08-31 19:23:06 · 242 阅读 · 0 评论 -
Perfect Service UVA - 1218 树形dp
紫书dp 主要是状态的确定 无根树转有根树 d(u,2)的状态转移很有意思 详见代码注释 #include<bits/stdc++.h> using namespace std; int n; const int maxn=10000+5; const int INF=1<<20; vector<int>G[maxn],vertices; int p[ma...原创 2018-08-31 20:47:17 · 286 阅读 · 1 评论 -
Headmaster's Headache UVA - 10817 dp集合构造
紫书dp 用位表示集合 其中位运算集合需要注意下 #include<bits/stdc++.h> using namespace std ; int m,n,s; int d[150][1<<10][1<<10]; int c[150]; int st[150]; string temp; const int INF=1<<20; int dp...原创 2018-08-31 22:14:12 · 283 阅读 · 0 评论 -
Twenty Questions UVA - 1252 状压dp 子集生成
题意有点绕 等于说是求最优策略下 即排除方案最优的情况下 需要排除最多次的集合的排除次数 详见代码注释 #include<bits/stdc++.h> const int maxn=13; char objects[300][200]; int d[1<<maxn][1<<maxn],cnt[1<<maxn][1<<maxn],...原创 2018-09-01 15:31:01 · 269 阅读 · 0 评论 -
Fund Management UVA - 1412 状压dp 状态的表示
太菜 看紫书代码看半天见注释 主要是状态难表达 转移倒是非常简单 #include<cstdio> #include<cstring> #include<vector> #include<map> using namespace std; const double INF = 1e30; const int maxn = 8; const i...原创 2018-09-01 17:28:11 · 280 阅读 · 0 评论 -
Tango Tango Insurrection UVA - 10618 多转移dp 终点逆推
紫书的代码 多转移问题 从终点逆推 #include<cstdio> #include<cstring> #include<cassert> const int UP = 0; const int LEFT = 1; const int RIGHT = 2; const int DOWN = 3; const int maxn = 70 + 5; /...原创 2018-09-02 14:33:36 · 267 阅读 · 0 评论 -
Dropping water balloons UVA - 10934 dp 有点难想
思路 dp[i][j]表示用i个球实验j次款所能测试的楼的最高层数 这个层数 不是从1开始的狭义的层数 是一个所能测的的层数的值 比如 在2 楼 如果所能测试的最高层数为5 则最高的所能测的层数位2+5=7 如果气球破了 当前测试的楼层位k dp[i-1][j-1]+1 ==k 如果没破 当前测试的楼层位k dp[i][j]=k+dp[i][j-1]表示测试之后没破则 i个球测j...原创 2018-09-02 16:17:52 · 254 阅读 · 0 评论 -
Fixing the Great Wall UVA - 1336 区间dp+前缀和+记忆化
紫书代码 dp中表示方向的p 因为机器人的有效位置肯定是i j两个点上 所以只要判断 是从左端点出发还是从右端点出发就能很快得计算出路程的时间 p=0时表示当前位于左边如果想要J+1 就要 j+1的标号x减去i的x 其他位置同理 同时最后要加上 每个点时间为0的修理费用 #include<bits/stdc++.h> using namespace std; const...原创 2018-09-02 20:24:55 · 239 阅读 · 0 评论 -
Bigger is Better UVA - 12105 dp
用两个数组 一个dp[i][j]表示用i根火柴 余数为j的数字最大位数 而p[i][j]记录一下这个位数中的最右边的那个数字是什么 #include<cstdio> #include<cstring> using namespace std; const int maxn = 100 + 5; const int maxm = 3000 + 5; // dp[i]...原创 2018-09-02 21:18:04 · 254 阅读 · 0 评论 -
Double Patience UVA - 1637 dp+概率
注意 一个是等概率选择 则 d[i]为后继状态的成功概率的平均值 意思是 如果取了 牌堆 1 2的牌后 剩下的选择只有 取1 3 后才能成功 则取 1 2成功的概率 为 取 1 3的方案 即 1 除以总方案数 #include<bits/stdc++.h> using namespace std; char card[9][4][3]; map<vector&l...原创 2018-09-08 15:33:56 · 267 阅读 · 0 评论
分享