点此看题面 大致题意: 有\(n\)个路灯,每个路灯有一定的建造费用,且建成后可照亮自身及周围距离为\(1\)的两个格子.你可以交换\(k\)次两个路灯的建造费用,求照亮所有格子的最小费用. 题意转换 首先可以发现交换显然是一个有后效性的操作,难以记录到状态中. 但是\(k\)这么小似乎别有深意? 考虑我们把一次交换分裂成两个操作,即在某一无需建路灯的位置额外建了一个路灯,和在某一需建路灯的位置免费建了一个路灯. 这样就容易\(DP\)了. 动态规划 考虑先把费用都向右移一位,再把第一个位置的费…
Online Judge:YCJSOI Label:Dp,思维题,预处理,滚动优化 题目描述 乐乐现在掌管一个大公司,办公楼共有n层.为了增加员工的身体素质,他决定在每层楼都建立一个活动室,活动室分乒乓球和排球两种. 已知每层楼喜欢乒乓球和排球的人数. 每个人的行走楼层数是他去自己喜欢的运动室的楼层数. 请你帮乐乐算算,每层楼应该建乒乓球还是排球,使得所有人行走楼层数总和最小. 输入 第一行一个整数n,表示楼层数量. 接下来n行 ,每行两个整数a和b,表示喜欢乒乓球和排球的人数. 输出 输出一个…
原文链接 https://www.cnblogs.com/cly-none/p/CSA49F.html 题意:Alice和Bob在玩游戏.有\(n\)种卡牌,每种卡牌有\(b_i\)张,保证\(\sum b_i\)为偶数.现在,Alice要把所有卡牌任意平分为2份(仅要求每份卡牌数为\(\frac {\sum b_i} {2}\)),并对每份分别进行一次游戏.第一次游戏由Alice先手,第二次由Bob先手. 每次游戏中,Alice和Bob会轮流取走一张卡牌直到取尽.设最后Alice有\(n_i\…
链接:https://ac.nowcoder.com/acm/contest/369/A 题目描述 若你摘得小的星星 你将得到小的幸福  若你摘得大的星星 你将得到大的财富  若两者都能摘得 你将得到永远的愿望  摘星是罪孽的宽恕 摘星是夜晚的奇迹  抓住它吧 你所期望的那颗星 无法触及,因而耀眼   明明触及了,却还是耀眼 ——<少女☆歌剧 Revue·Starlight> 题目描述 "我明白." 作为这命运剧场永远的观众,小D一直注视着这片星光璀璨的舞台,舞台上,少女们…
题目链接:https://codeforces.com/contest/1105 C. Ayoub and Lost Array 题目大意:一个长度为n的数组,数组的元素都在[L,R]之间,并且数组全部元素的和可以被3整除,问有多少种方法构建出该数组.答案模1000000007 例 输入 2 1 3 输出 3 note:满足的情况只有[1,2],[2,1],[3,3] 解题思路:用dp[i][j]表示长度为i的数组,元素大小在[L,R]之间,并且元素和模3的余数为j的方案数,我们可以计算出[L,…
https://codeforces.com/problemset/problem/353/D 大意:给定字符串, 每一秒, 若F在M的右侧, 则交换M与F, 求多少秒后F全在M左侧 $dp[i]$为位置$i$处的$F$复位所花费时间, 有 $dp[i] = max(dp[i-1]+1,cnt_i)$, $cnt_i$为前$i$位$M$的个数 $dp$最大值即为答案 #include <iostream> #include <algorithm> #include <cstd…
Codeforces 822C Hacker, pack your bags!(思维)   题目大意:给你n个旅券,上面有开始时间l,结束时间r,和花费cost,要求选择两张时间不相交的旅券时间长度相加为x,且要求花费最少. #include <bits/stdc++.h> using namespace std; typedef long long ll; const int INF = 0x3f3f3f3f; ; ; ; struct node { int l;int r;int cs;…
题目大意: 把一个字符串s分割成m个串,这m个串满足至多有一种字符出现次数为奇数次,其他均为偶数次,问m的最小值 题解: 首先我们想一下纯暴力怎么做 显然是可以n^2暴力的,然后dp[i]表示分割到i的所用最少的串个数 接下来就是枚举所有可行的j,使得dp[j]转移到dp[i]. 虽然可以暴力找,但是如果使用暴力找,则后续就无法优化了,这里就用到了异或的思想 用一个26位的int数组a[i]表示从1到i的状态,第j位为1代表这个字母出现了奇数次,反之为偶数次. 那么区间[l, r]是否可行,就是…
题目传送门:bzoj4976 不得不说这是道脑洞dp,思路真的清奇. 我们可以发现,虽然n很大,但是k只有100,这里面似乎隐藏了什么玄机. 我们可以发现,设总共有$ tot $个二进制位在这n个数中有出现过1,那么当$ n-k>=tot $时,所有二进制位都能取到,可以直接计算答案. 当$ n-k<tot $时,n最大只有116(因为宝石价值最大只有1e5<2^17),那么就可以随便dp一下:设$ f[i][j] $表示处理前$ i $个数,当前或运算结果为$ j $时,最多能选取多少…
点此看题面 大致题意: 给你一张无向图,每个点权值为\(0\)或\(1\),多组询问两点之间是否存在一条回文路径. 暴力\(DP\) 首先,看到\(n\)如此之小(\(n\le5000\)),便容易想到一个\(O(m^2)\)的暴力\(DP\). 我们用\(f_{i,j}\)表示\(i\)与\(j\)两点之间是否存在一条回文路径. 初始化,\(f_{i,i}=1,f_{i,j}=1(s_i=s_j)\),即分别预处理最短的奇数长度回文路径和偶数长度回文路径. 然后我们把所有\(f_{i,j}=1…