QWQ啊 这个题可以说是我目前碰到过的最难理解的dp之一了. 题目大意: 已知参赛选手的得分,你的任务是按照得分从高到底给出选手的排名.遗憾的是,保存选手信息的数据结构只支持 一种操作,即将一个选手从位置i移动到位置j,该移动不改变其他选手的相对位置,即如果i>j,位置j和位置i-1 之间的选手的位置都比原来加1,相反如果i<j,则位置i+1和位置j之间的选手的位置都比原来减一.上述移动的操 作的代价定义为i+j,这里,位置编号从1开始.请你编程确定一个移动选手的步骤,将选手按照得分从高到低排…
Sue的小球 名次排序问题 方块消除 奥运物流 Sue的小球 题目大意 有 \(n\) 个小球在下落,初始位置 \((x_i,y_i)\),下落速度为 \(v_i\).你初始位置在 \(x_0\),速度为 \(1\).我们定义一个小球的贡献为接到它的时候它的纵坐标.问接到每个小球(接只接一次)的贡献之和的最大值. \(n\le 10^3\). 思路 算是为dp开了另外一种思路. 首先你发现,我们贪心一下,肯定每次选没选且最靠近当前位置的小球,具体证明不是很难.形式化一下,就是说按横坐标排序之后,…
D. Sequence Sorting 题目大意:给你一个序列,有一种操作就是对所有相同的数可以挪到最前面,也可以挪到最后面,问最少操作次数. 首先,对于很多个相同的数,可以缩成两个位置,一个是就是这个数出现的区间,一个是最大位置,一个是最小位置. 如果数不挪,那就必须是连续递增的一段数,而且这个些数不能相互影响,也就是小的那个数的最大位置一定要在大的那个数的最小位置的前面. 然后就是找最长的一段连续递增的序列了,这个序列有两个要求,一个是递增,一个是必须连续,意思是对于si 和si+1 不存在…
​​​​​​​​​​​​​​大致意思就是现在你要不断的奔跑到不同的地点去接球,每一秒可以移动一个单位长度,而你接到一个球的动作是瞬间的,收益是y[i]-t*v[i] 然后呢,要求分数最高. 起初看这个题目QWQ完全没有任何思路,大概只能想到...... 先按照x排序(记得把起始位置也加进去) 然后令f[l][r]表示收集完l~r的球,最后在l的最大收益 g[l][r]收集完l~r的球,最后在r的最大收益 然后...然后....然后.... 我就去看题解了. 好了 进入正题. 首先我们定义 f[l…
题目:http://poj.org/problem?id=1417 题意:输入三个数m, p, q 分别表示接下来的输入行数,天使数目,恶魔数目: 接下来m行输入形如x, y, ch,ch为yes表示x说y是天使,ch为no表示x说y不是天使(x, y为天使,恶魔的编号,1<=x,y<=p+q):天使只说真话,恶魔只说假话: 如果不能确定所有天使的编号,输出no,若能确定,输出所有天使的编号,并且以end结尾: 注意:可能会有连续两行一样的输入:还有,若x==y,x为天使: 思路:种类并查集+…
题目问N匹马比赛有多少种结果.一开始想用排列组合搞搞,然后发现想错了.艰难地把思路转向DP,最后AC了. dp[i][j]表示前i匹马确定出j个名次的方案数 dp[1][1]=1 对于第i匹马,它要确定出j个名次:要嘛前i-1匹确定出j个次名,然后第i匹可以成为第1...j名:要嘛前i-1匹确定出j-1个名次,然后第i匹成为独立的新的一个名次,也有第1..j名j种选择. 所以状态转移方程是:dp[i][j]=d[i-1][j]*j+d[i-1][j-1]*j #include<cstdio>…
自己做的一个小项目里需要用mysql计算一些信息. mysql中的 表如下(注:表中数据都是测试数据,随机生成的) mysql> select * from shake_log; +-----+-------------+--------+---------------------+------+ | id | mobile | credit | time | type | +-----+-------------+--------+---------------------+------+ |…
题解: 二营长!你他娘的意大利炮呢? dp[i][j][0]: 从i,跋涉到以i为根的子树的每一个节点,在第j个数位上一共产生了多少个0. dp[i][j][1]: 从i,跋涉到以i为根的子树的每一个节点,在第j个数位上一共产生了多少个1. 转移式:(cur为i的儿子,t = (a[i]>>j)&1) dp[i][j][0^t] += dp[cur][j][0]; dp[i][j][1^t] += dp[cur][j][1]; 初始化: dp[i][j][0] = (t==0); dp…
做了好久.... 大致思路: 求出前k大的方格之和即为答案, 先考虑一维的情况,设f[i]为数位上各个数相乘为i的数的总数,也就是对于数i,有f[i]个数它们各个位相乘为i, 再拓展到二维,根据乘法原理(貌似是这个原理吧),方格(i , j)的金块数就是f[i] * f[j], 所以先数位DP求出f数组,然后贪心取前k大. 具体过程: 首先观察这道题的特殊性质,可以发现,由于是各个位上的数相乘得到贡献的目标,而各个位上的数只有: 1 2 3 4 5 6 7 8 9(如果有0的话金块就飞出去了,所…
题意:首先定义了一种类数(标志数) 1:1到9都是标志数. 2:若x / 10是标志数,假设x /10在标志数中的排名是k, 若x的个位数小于k % 11, 那么x也是标志数. 现在给你一个字符串,问有多少个子串代表的数字是标志数? 思路:我们先假设已经求出的所有的标志数,并且知道每个标志数的rank(rank已经对11取模).设dp[i][j]是第i个数字和第 i - 1位数字构成的2位数的rank为j,并且最高2位为这两位数字的合法数字的数目.可能有点拗口,我们举一个例子. 假设字符串是32…