1001:关路灯1
因为范围很小可以也用搜索,正解是区间dp。设f[l][r][0/1]为仅关掉l-r区间的路灯,最后人在l/r的最少消耗。f[l][r][0]=min(f[l+1][r][0]+(tot-w[r]+w[l])*(d[l+1]-d[l]),f[l+1][r][1]+(tot-w[r]+w[l])*(d[r]-d[l])),f[l][r][1]=min(f[l][r-1][0]+(tot-w[r-1]+w[l-1])*(d[r]-d[l]),f[l][r-1][1]+(tot-w[r-1]+w[l-1])*(d[r]-d[r-1]));
1006: 手机网络
重题,见1026
1008:利润 Profits
贪心,如果当前s加上现在的值为负数不如从0开始,否则继续加,记录最大的s即为答案
1010: 奶牛杂技 Cow Acrobats
经典贪心,按w[i]+s[i]排序即可,列个数学表达式可证明。
1011: 抓苹果 Apple Catching
f[i][j][0/1]表示在第i分钟已经移动j次,在第1/2棵苹果树下能抓到的最大苹果数量。f[i][j][k]=max(f[i-1][j-1][k^1],f[i-1][j][k]);当前这颗树下有苹果则+1
1013: 建造栅栏 Building A Fence
f[i][1/2/3/4]表示把长度为i的木头锯成1/2/3/4段的方案数,f[i][k]+=f[j][k-1];(j<i&&j<n/2&&i-j<n/2)(因为要能拼成四边形,每段长度要小于n/2)
1014: 建造道路 Building Roads
把已有的路边权设为0,最小生成树裸题
1015: 青铜莲花池 Bronze Lilypad Pond
直接bfs
1016: 滑雪课程 Ski Lessons
f[i][j]表示在第i分钟,能力值为j的最大滑行次数。预处理c[j]表示能力值为j时能去的滑雪场的最少用时。f[i][j]=max(f[i-1][j],f[i-c[j]][j]+1)如果当前i恰好为某个课程的结束时间,f[i][a[k]]=max(f[i][a[k]],f[i-l[k]][j])
1017: 奶牛飞盘队 Cow Frisbee Team
f[i][j]表示前i个队员选任意个能力总和模F为j的方案数,f[i][j]+=f[i-1][(j-k+F)%F];
1018: 奶牛博览会 Cow Exhibition
f[j]表示奶牛智商和为j的最大情商和,f[j]=max(f[j-a[i].x]+a[i].y,f[j]);有负数要数组平移,注意循环顺序
1019: 最近回文 Cheapest Palindrome
f[l][r]表示把l-r区间修改成回文的最小花费。比如你l+1-r区间已经为回文,要不把s[l]删掉要不在r的后面添一个s[l],因此把删掉或是添加这个字母的最小花费预处理出来记作a[‘a’…’z’]。则f[l][r]=min(f[l-1][r]+a[s[l]],f[l][r-1]+a[s[r]]),当s[l]==s[r]时f[l][r]=min(f[l][r],f[l+1][r-1]);
1020: 安慰奶牛 Cheering up the Cows
道路拆除后是一棵树,则每条边约翰都要经过两次,把每条边的边权赋为c[u]+c[v]+e[i].d*2,跑最小生成树即可。起点要安慰两次,把c最小的点作为起点,加到答案里输出
1024: 奶牛跨栏 Cow Hurdles
Floyd裸题
1026: 手机网络 Cell Phone Network
f[u][0]在u点不建基站,u点可能收到信号也可能没收到信号的最小基站数;f[u][1]在u点建基站的最小基站数;f[u][2]在u点不建基站,u点一定收到信号的最小基站数。f[u][0]=min(f[v][2],f[v][1]);f[u][1]=min(f[v][0],f[v][1]);如果所有的f[v][2]<f[v][1],则应把某个f[v][2]换成f[v][1],f[u][2]=f[u][0]+min(f[v][1]-f[v][2])否则f[u][2]=f[u][0];
1027: 提交作业 Turning in Homework
f[l][r][0/1]表示只有l-r区间的作业没交,现在在l/r的最短时间,f[l][r][0]=min(max(f[l-1][r][0]+x[l]-x[l-1],t[l]), max(f[l][r+1][1]+x[r+1]-x[l],t[l]);f[l][r][1]=min(max(f[l-1][r][0]+x[r]-x[l-1],t[r]), max(f[l][r+1][1]+x[r+1]-x[r],t[r]));
1029: 滑雪缆车 skilift
f[i]表示第i个拐点必建支柱、前i个拐点建的最小支柱数。f[i]=min(f[j]+1)(满足i-j间没有山坡高于钢丝即i-j间的任意山坡k到i的斜率都小于i-j斜率)
1030: 派发巧克力 cgiving
双向边,i号草地到1号草地的距离为1号草地到i号草地的距离。以1号草地为起点跑spfa即可
1031: 赞助学费 finance
把奶牛按CSAT成绩从大到小排序,f[i]表示1-i的奶牛中选n/2个奶牛的最少奖学金,g[i]表示i-n的奶牛中选n/2个奶牛的最少奖学金,则当第一个f[i-1]+g[i+1]<=F时,第i头奶牛的CSAT成绩为答案
1032: 白银莲花池 Silver Lilypad Pond
以两点间需要添加的莲花数为边权建图,跑spfa即第一问答案,另两问在spfa的过程中一起算出。
1033: 地震 Earthquake(奶牛施工队)
二分答案,每条道路的权值为c+mid*t(利润加成本),跑最小生成树,如果n-1条边加起来权值小于等于F,则这个mid满足条件
1036: 奶牛观光
http://www.cnblogs.com/perseawe/archive/2012/05/03/01fsgh.html自己去看
1037: 道路重建
树形dp,f[u][i]表示以u为根的子树使i个牛棚完全隔绝的最小破坏道路数,初始值f[u][1]=sum[u](u的度数);f[u][i]=min(f[v][j]+f[u][i-j]-2);(多算了u-v这条边两次)
1038: 奶牛接力
离散化+倍增Floyd或矩阵乘法。
1040: 混乱奶牛
状压
1041: 修剪草坪
F[i]挑选前i个奶牛,第i个奶牛不选的最大工作能力之和。F[i]=f[j]+sum[i-1]-sum[j](i-j-1<=k)单调队列优化
1042: 道路翻新
F[v][i]从1号牛棚到达v号牛棚、翻新了i条道路的最短通行时间。F[v][i]=min(f[u][i-1],f[u][i]+e[i].d);
1043: 安排牧场
状压
1044: 叠积木
并查集,画图理解
1045: 奶牛抗议 Generic Cow Protests
离散化。F[i]+=f[j](sum[i]>=sum[j])线段树维护
1046: 洞穴奶牛第一话 Cave Cow 1
预处理出两两洞穴路径上能通过的最大尺寸,状压dp
1047: 打扫食槽 Cleaning Up
见洛谷
1051: 明星奶牛 Popular Cows
Tarjan缩点。若只有一个大点出度为0,则该大点上所有点被所有奶牛喜欢。
1052: 电子游戏 Video Game Troubles
背包。g[j]表示购买了该平台游戏的背包,f[j]=max(g[j-p[i],f[j])
1053: 产奶比赛 Milk Team Select
F[u][i][0/1]表示以u为根的子树中包含i对母女关系,其中u点取或不取的最大产奶量。F[u][i][0]=max(f[v][j][0],f[v][j][1])+f[u][i-j][0];f[u][i][1]=max(f[v][j][0]+f[u][i-j][1],f[v][j][1]+f[u][i-j-1][1])+c[u]
1057: 旅馆 Hotel
线段树。空房间标记为0,记录每段0的连续最长,左右两端0的连续长度。查询时左区间、跨区间、右区间依次判断。
1058: 道路和航线 Roads and Planes
卡spfa的题,加个spfa优化应该能过,然而我可能是姿势优化的姿势不正确,还是被卡……我只能去~~抄~~打了一个所谓正解:因为题目保证【如果Xi到Yi有一条航 线,就不可能从Yi通过其他公路或航线返回Xi】,所以每一条航线一定是跨越了两个联通块的,预处理每个联通块入度,从起点的联通块开始dij,中间把航线到达的下一联通块入度减一,当入度为0时加入队列,不断跑dij得出答案。求联通块用并查集即可。……其实再让我打我也不会╮(╯▽╰)╭
1059: 祖孙询问
记录每个点开始访问的时间l、结束访问的时间r,如果l[x]<l[y]<r[y]<r[x]则y为x子孙。
1077: 掷骰子
记一个骰子所有面的数字之和为tot,则该骰子的期望值为tot/a[i],显然越小的a[i]分配越大的tot最优,贪心即可。
1104: 维护序列seq
线段树。注意的是如果这颗子树先打上了+的tag,又要打上*的tag,按分配律:+的tag要乘以*的tag;先打上了*的tag,又要打上*的tag,*的tag也应相乘合并。
1116: 糖果
差分约束。要特判要求糖果自己比自己多或少的情况。
1118: 序列操作
线段树。
1119: 同余方程
扩展欧几里得。
1120: 借教室
二分+差分数组。
1121: 疫情控制
贪心+二分+倍增。二分时间。显然军队往父亲走最优,此处倍增加速,如果这个军队能够到达根节点,记录下来。处理出没有被控制的根节点的儿子,把能够到达根节点的军队分配给它们。显然越远的子树由剩余路程越远的子树控制。还需注意的是如果有军队是从该子树到达根节点的,显然军队不要往根节点走更优,因此还需记录从子树出去的剩余路程最近的军队。
1123: 聪明的质检员
二分。
1124: 观光公交
贪心。显然加速器应该用在能够影响最多人的路上。当i点最后一个人上来的时间大于车行驶到这儿的时间,i点以前的点用加速器无法影响到i点,由此算出在每个点用加速器能够影响到的最远点和人数。
1130: 开车旅行
双向链表或set预处理每个城市的最近点与最远点,倍增开车。
1136: 酸奶工厂
贪心。这个月的酸奶如果保存到下个月,则这个月酸奶成本看成ci+s。记录前i-1个月酸奶的最小成本与当前这个月的成本比较、替换。
1137: 奶牛工资
大于等于c面额的钱可先预处理掉。然后每个月从大到小给不超过c的钱,如果不够c,再给一张大于差额的最小面额的钱。
1138: 愤怒的奶牛
二分答案。
1141: 全能奶牛
状压dp。
1142: 享受巧克力
二分答案。
1144: 虫洞
判负环就好,都告诉你数据弱了……好吧认真的说,此题的其他翻译都没有提到要以第一个地点为起点,网上的题解也都是判负环……综上可能是cofun的翻译有问题……。
1146: 拜访奶牛
F[u][0/1]表示以u为根的子树中,拜访u与否的最多访问数。F[u][0]+=max(f[v][0],f[v][1]);f[u][1]+=f[v][0];
1149: 奶牛万圣节
感觉应该有更简单的方法的……不管了反正我tarjan缩点直接搞的。
1150: 金币游戏
F[l][r]表示取l-r区间能得到的最大金币数。F[l][r]=sum[r]-sum[l-1]-min(f[l][r-1],f[l+1][r])
1152: 过路费
Floyd,k按牌照标准从小到大的草地开始枚举。
1153: 圣诞装饰
贪心。记录以u为根的子树中最便宜的装饰费用,不够挂上即可。
1155: 奶牛乘电梯
状压dp,f[i]表示状态为i时所需的最少往返次数,g[i]表示f[i]对应的重量,显然f[i]最小的同事g[i]最小最优。
1158: 破坏阴谋
二分答案。把所有的a[i]-=mid,找最大子段和(即要破坏的连续的机器),如果总和减去最大子段和小于0(即破坏了这段机器后剩下效率比mid低),答案满足。
1165: 三角牧场
F[j][k]表示拼出一段长度为j、一段长度为k的木板可行与否。F[j][k]|=f[j-a[i]][k]|f[j][k-a[i]];最后枚举判断三角形可行与否
1167: 奶牛吃草
见1001关路灯
1169: 不找零
状压dp。F[i]表状态为i时能付钱到的最远的一个奶牛,枚举最后一次刷的卡,二分查找。若该f[i]==n,则计算没刷的卡,尝试更新答案。
1171: 导航难题
并查集。维护每个点x轴上和y轴上到根的距离。
1173: 向右看齐
单调队列啥的,随便怎么做都行。
1176: 数数的梦 Dream
A和B很大,看起来好像不能暴力做,然而这题就是这么水……
1177: 促销日
完全背包。F[j]表示恰花钱j元的方案,f[j]+=f[j-i](i<=k)
1179: 奶牛优惠券
先按折扣价从小到大排,把前k头买下来。然后把没买的牛按原价排序,如果该头牛的折扣力度比买的牛中折扣力度最小的大,显然把优惠券用在这头牛合适。
1183: 分期付款
二分答案
1185: 滑雪比赛
从后往前计算每个拐弯点真正的限制,顺着贪心。
1186: 太空电梯
按照安全海拔从小到大排序,然后就是裸的背包了。
1189: 连击游戏
AC自动机+dp。在字典树上做dp,按下这个树上这个位置的键后,显然会触发这个位置的fail指针的连击。因此记录该位置会导致的连击数为tree[j][3]。设f[i][j]表示按了i次键后且最后一次按的位置为j的最大连击数。F[i][tree[j][k]]=max(f[i][tree[j][k]],f[i-1][j]+tree[tree[j][k]][3]);
1192: 跳石头
二分答案。
1193: 次短路径
Spfa的过程中再加入次短路g的判断即好。
1196: 保护花朵
还是经典的贪心,按ti/di从小到大排序,列数学表达式证明
1197: 最少找零(fewcoins)
F[i]表示约翰恰花掉i元的最少交换钞票张数,g[i]表示老板找给约翰i元的最少钞票张数。f、g用背包算出即可。则ans=min(f[i]+g[i-T]);
1199: 奶牛的站位
差分约束。
1207: 平分子集
Tot=n*(n+1)/2,算tot/2的分法,01背包即可。每种方案会算两遍,答案要除以2
1208: 奶牛比赛
连边,f[i][j]表示从i能否胜过j,跑Floyd,对于每头牛,统计它能胜过的或能胜过它的牛数,如果为n-1,此牛的名次确定。
1221: 录制唱片
F[i][j]表示前i首个选j首需要的专辑数,g[i][j]是f[i][j]对应的最后一张专辑的时间。
1246: 生活大爆炸版石头剪刀布
……没啥好讲的的,很傻。
1247: 无线网络发射器选址
暴力枚举
1248: 联合权值
距离为2的点对不是某点的孩子和父亲就是某点的两两孩子,明白这个就随便搞了。
1249: 飞扬的小鸟
向上完全背包,向下完全背包。注意的是要等所有的状态都处理完了再把不能取到的状态记为正无穷。因为可能你从该点向上一次不可行但两次可行,而完全背包中向上两次的状态是由向上一次的状态转移而来的。
1250: 寻找道路
先把符合题目要求的点预处理出来标记,然后Bfs就好。
1251: 解方程
秦九韶要会,不会百度。正解是枚举x,取几个素数来mod检验,比如现在素数为p,枚举的x从1到p-1就好。还有比较玄学的方法是mod(1e9+7),用这个能过所有数据……要提醒的是mod的数要开常量,我因为这个tle了一个晚上+一个早上……
1292: 队列安排
链表
1293: 音乐会的等待(concert)
单调队列从大到小。显然如果这个人比前一个人高,则前一个人再也没有机会被之后的人看到。
1294: Sliding window1
还是单调队列。
1295: 广告印刷(ad.pas/c/cpp)