Gym 101873I - Uberwatch - [DP]】的更多相关文章

题目链接:http://codeforces.com/gym/101873/problem/I 题意: 给出 $n(1 \le n \le 300000)$ 个单位时间,每个单位时间给出一个 $x_i(0 \le x_i \le 32)$ 代表该单位时间内视野内的敌人数目. 现在你有一个终极武器,每次使用可以消灭视野内所有敌人,但是需要 $m$ 个单位时间进行充能,且刚开始该武器是没有充能的. 这意味着,第一次可以使用该武器是在第 $m+1$ 个单位时间内,而往后若在第 $i$ 个单位时间使用则…
George met AbdelKader in the corridor of the CS department busy trying to fix a group of incorrect equations. Seeing how fast he is, George decided to challenge AbdelKader with a very large incorrect equation. AbdelKader happily accepted the challeng…
要点 \(\sum{w_i} <= 1e8\)是有意味的. 设\(dp[i]\)为至少可以承受重量\(i\)的最大可达高度.转移时可以转移的\(j\)必须满足加上它之后得保证各层不能超重,所以\(dp[j]\)会由\(dp[j + w_i]\)转移过来,且\(j < w_i\). 复杂度\(O(nlogn+\sum{w_i})\). const int maxn = 1e5 + 5, maxw = 1e8 + 5; int n, d, ans; struct frog { int l, w,…
dp[i][j][k]表示第i位填数字k时,与后面的相连模数为j时,后面的数字最小填多少. 测得我提心吊胆还以为复杂度高了,结果出来46ms还是cf评测姬强啊. #pragma comment(linker, "/STACK:1024000000,1024000000") #include <cstdio> #include <cstring> #include <cstdlib> #include <cmath> #include &l…
dp[i][j][0/1]:第i天处于第j状态要不要吃. const int maxn = 1e2 + 5; int n, a[maxn], b[maxn]; int dp[maxn][maxn][2]; int main() { read(n), read(b[1]); rep(i, 1, n) read(a[i]); rep(i, 2, n) b[i] = b[i - 1] * 2 / 3; rep(i, 1, n) { rep(j, 1, i) { dp[i][j][0] = dp[i -…
题目大意 有r*s张扑克牌,数字从1到 r,每种数字有s种颜色. 询问对于所有随机的d张牌,能选出c张组成顺子的概率和组成同花的概率. 解题分析 对于组成顺子的概率,令dp[i][j][k]表示一共选出了i张牌,数字从1~j,最后有k张牌是顺子.对于每个数字进行考虑,有0~s种选法.要保证连续c张牌的顺子. 对于组成同花的概率,令dp[i][j]表示一共选出了i张牌,颜色从1~j,.对于每种颜色进行考虑,有0~r种选法.要保证没有c张牌是相同颜色的. 最后用高精度来输出答案. 参考程序 #inc…
比赛链接:https://vjudge.net/contest/405905#problem/D 题意: 给你一个长度为n的由0或1构成的串s,你需要切割这个串,要求切割之后的每一个子串长度要小于等于k.且每一个子串内不能全都是01交替,就比如 00101010.11010101这样没有问题,不需要切割,因为前面有两个相同的 01010101.10101010这样就不行,就必须切割开 问你最少需要切割多少次 题解: 我们设定输入的01串下标从1开始 我们使用dp[i]表示:s字符串的从第1个字符…
Problem D: Dinner Bet \[ Time Limit: 1.5 s \quad Memory Limit: 256 MiB \] 题意 题意是两个人在玩游戏,一共有\(n\)张牌,这两个人手上各有\(m\)张牌,然后对于每一轮操作,从总的\(n\)张牌中随机抽出\(D\)张牌,然后两个人手上含有这\(D\)张牌点数的牌被标记起来,在把\(D\)张牌放回\(n\)堆中,当有一个人手上的牌全部被标记过,游戏就结束,让你求这个游戏可以玩几轮的期望. 思路 一开始看到这个题我是束手无策…
http://codeforces.com/gym/101397 B dp[i][j][k]: i为前一个行动的状态,0-switch.1-type,j为当前状态layout的编号,k 是已键入的字符数量. 遍历k,对每个k遍历j: 1..n dp[0][j % n + 1][k] = min(dp[0][j % n + 1][k], min(dp[0][j][k] + b, dp[1][j][k] + a)) ↑ 执行两次,第二遍处理是为了保证n->1之后正确 dp[1][j][k + 1]…
A Drawing Borders 很多构造方法,下图可能是最简单的了 代码: #include<bits/stdc++.h> using namespace std; ; struct Point{ int x,y; }; Point a[maxn]; ; Point b[maxn]; ; vector<pair<double,double> > va; vector<pair<double,double> > vb; void checka(…