动态规划/思维
ttoobne
for the times they are a-changin'
展开
-
POJ1742 Coins (可行性背包)
题目链接题解:看到面试题和这个很像,好像是挺经典的一个问题,定义一个 sum 数组代表第 i 枚硬币在达到硬币总数为j 的时候使用了几枚,然后就可以控制硬币的使用次数了。代码:#include <bits/stdc++.h>using namespace std;typedef long long ll;typedef unsigned long long ...原创 2020-03-25 23:30:32 · 346 阅读 · 0 评论 -
Codeforces Round #418 (Div. 2) C. An impassioned circulation of affection (DP)
题目链接题解:简单DP, dp[ch][ i ][ j ] 表示到第 i 位为止填了 j 个 ch 字母空位的最长连续长度,如果用 ans[ch][i] 表示 ch 字母至多填 i 次空位的最大连续长度,则 dp 数组可以省去一维。#include <bits/stdc++.h>using namespace std;typedef long long ll;typedef...原创 2019-11-03 20:09:42 · 274 阅读 · 0 评论 -
2019南京网络赛 D. Robots(概率DP与拓扑排序)
题目链接在做这道题之前看一个简化版:绿豆蛙的归宿设 F[x]F[x]F[x] 表示从 xxx 走到终点所经过的路径的期望长度。若从 xxx 出发有 kkk 条边,分别到达 y1,y2...yky_1,y_2...y_ky1,y2...yk ,边长分别为 z1,z2...zkz_1,z_2...z_kz1,z2...zk ,则根据数学期望的定义和性质,有: F[x]=1k∗∑i=1k...原创 2019-09-07 21:54:28 · 279 阅读 · 0 评论 -
2019牛客暑期多校训练营(第三场)G Removing Stones (分治+RMQ)
题目链接题解:如果一段区间它满足 max(l,r)≤⌊sum(l,r)/2⌋max(l, r)\leq \lfloor sum(l, r)/2\rfloormax(l,r)≤⌊sum(l,r)/2⌋,则代表这个区间符合要求。那我们就可以对这个区间进行分治,分为最大值左边的区间和最大值右边的区间。那么包括最大值的区间怎么办呢?我们可以枚举长度较小的那个区间的值作为一个端点,二分查找另外一个区间...原创 2019-08-23 10:37:57 · 215 阅读 · 0 评论 -
2019牛客暑期多校训练营(第七场)H Pair(数位dp)
题目链接题解:数位dp。有两个限制条件,需要枚举两个数字,那么 dp 需要开五个维度,分别是 位数、第一个限制条件的状态 (0 代表不满足,1 代表可能满足,2 代表满足)、第二个限制条件的状态、第一个数字的该位二进制值、第二个数字的该位二进制值。那么接下来就是经典的数位 dp 了,要注意减去 x 为0 或者 y 为 0 的情况。代码:#include <bits/s...原创 2019-08-13 19:06:20 · 186 阅读 · 0 评论 -
P1220 关路灯 (区间dp)
题目链接题解:在关完路灯 i~j 时,老张要么在 i 处,要么在 j 处。1. 要么是在关完 j 路灯后再回头关 i 路灯的,要么是在关完第 i+1 盏后继续前进关掉 i 的,在这两种情况中选择耗能最小的。2. 要么是在关完 i 路灯后再回头关 j 路灯的,要么是在关完第 j-1 盏后继续前进关掉 j 的,在这两种情况中选择耗能最小的。因此设 dp[i][j][1] 表示在关完...原创 2019-05-10 10:10:20 · 246 阅读 · 1 评论 -
校赛题解
A.CQW又迟到了水题。#include <bits/stdc++.h>using namespace std;typedef long long ll;#define int ll#define INF 0x3f3f3f3f3f3f3f3f#define fastio ios::sync_with_stdio(false), cin.tie(0)cons...原创 2019-05-13 19:39:12 · 303 阅读 · 0 评论 -
P2704 [NOI2001]炮兵阵地 (状压DP)
题目链接题解:设dp方程 dp[id][j][i] = max(dp[id][j][i], dp[id-1][k][j] + no[i].num) 为要考虑上一行和上上行。数组全开会炸内存,用滚动数组,滚三行即可。代码:%:pragma GCC optimize(3)#include <algorithm>#include <iostream>#...原创 2019-05-10 10:11:51 · 216 阅读 · 0 评论 -
Uva 10881 (思维)
题意:有若干只蚂蚁在一根木棒上爬, 相遇后就转向, 告诉你每只蚂蚁的状态和蚂蚁活动的时间, 求每只蚂蚁的最终状态。题解:虽然看似很复杂, 但仔细想想每只蚂蚁的活动的相对位置其实是不变的, 这样记录一下每只蚂蚁的初始编号就可以解决了。(这题没说 L == 0 的时候蚂蚁不算掉下去, wa了n发, 坑死人,,)代码:#include&amp;amp;amp;amp;lt;cstdio&amp;amp;amp;amp;gt;#include&amp原创 2018-08-01 16:23:39 · 230 阅读 · 0 评论 -
UVa11825 (状态压缩 + dp)
题目链接(需翻墙)题意:数学模型:把n个集合P1,P2,P3。。。Pn分成尽量多组,使得每组中所有集合的并集等于全集。题解:cover(s)表示若干Pi的集合S中所有Pi的并集(二进制表示),即这些Pi在数值上的“按位或”。不(hen)难想到这样的动态规划:用ans(s)表示子集s最多可以分成多少组,则ans(s) = max{ans(s - ss)| ss是s的子集,cove...原创 2018-09-23 09:22:55 · 226 阅读 · 0 评论 -
poj2184 Cow Exhibition (变种01背包)
题目链接题意:存在n头牛,每头牛有情商和智商,都可为负数,在情商之和和智商之和都不为负数的情况下求怎样选择能使得情商与智商之和总和最大。存在负数的01背包。题解:将智商当作背包容量,另一个为价值,但是背包容量不能为负,所以要将智商每一个加上1000。看起来简单,但是处理起来还是有很多地方需要注意的。#include<cstdio>#include<iostream...原创 2018-10-29 21:20:28 · 233 阅读 · 0 评论 -
Codeforces Round #551 (Div. 2)D. Serval and Rooted Tree (树形dp 思维)
题目链接题意:给你一颗以 1 为根的树,树的形状确定,每个节点有一个类型 0 或 1,0 代表该点的权值取其儿子中权值最小的那一个,1 则反之。所有的叶子节点权值为 1 - m(m为叶子节点数量),但是并不知道每个叶子节点的具体权值。最后要求出根(即节点1)的权值最大可能是多少。题解:由于叶子节点的权值是不确定的,所以按照普通的递推是行不通的,那么我们可以按照 该节点最大可以排第几...原创 2019-04-17 14:29:20 · 197 阅读 · 0 评论 -
Codeforces Gym - 101982C (dp)
题目链接题意:给 n 个数,求出 选 k 个不同的数有几种选择方法, 结果对998244353取模。题解:dp[i][j] 存的是 i 种数中选 j 个数的情况种数。预先处理出有几种数并且每种数有几个。那么 i种数中选 j 个数的情况数量可以由第 i 种数选或者不选推得。即 dp[i][j] = dp[i-1][j] + dp[i-1][j-1] * num[i]。(n...原创 2019-04-27 14:13:50 · 556 阅读 · 0 评论 -
洛谷 P2765 魔术球问题 (网络流 + 思维)
题目链接题意:给你 n 根柱子,需要往上放小球,小球的编号从 1 开始(1,2,3 ...),要使得每两个相邻的球之和为平方数(4, 9, 16 ...),问最多可以放多少个小球。题解:从 1 开始,一个一个地加入小球,每个小球分为两个点,一个点由源点流向它,容量为 1 ,另一个点由它流向汇点,容量也为 1 。那么每次加入一个点,如果能够和之前加入的数构成平方数,则将这个数的第一个...原创 2019-04-27 13:49:37 · 2636 阅读 · 0 评论