题意:你有n块木头,每块木头有一个高h和宽w,你可以把高度相同的木头合并成一块木头.你可以选择一些木头消去它们的一部分,浪费的部分是 消去部分的高度 * 木头的宽度,问把n块木头变成恰好m块木头至少要浪费多少木料? 思路:把木头从高到第排序,设dp[i][j]为前i块木头合并成了j块木头的最小花费.因为从大到小排序,所以合并后最后一块木头的高度一定是合并前的第i块木头的高度.那么,容易得出dp转移方程:dp[i][j] = min(dp[k][j - 1] + cal(k, i)),其中cal(…
题目传送门:https://www.nowcoder.com/acm/contest/142/J 题意:给一个hash table,求出字典序最小的插入序列,或者判断不合法. 分析: eg.对于序列{7,8,16},插入后为{16, -1, -1, -1, -1, -1, -1, 7, 8}.(即,依次插入7,8,16.而插入16时发现7已经被占,所以依次考虑(h(x)+1)%n ,因此16放在0的位置上.)这是正向插入,问题是给一个最终序列,问插入序列. 通过对hash表的观察可以得到: 一个…
牛客多校第3场 J 思维+树状数组+二分 传送门:https://ac.nowcoder.com/acm/contest/883/J 题意: 给你q个询问,和一个队列容量f 询问有两种操作: 0.访问操作,如果询问的name在队列中存在的话,那么就输出队列中name对应的val值,然后将队列中name对应的元素扔到队列的尾部去,否则就直接将该元素插入到队列的尾部去 1.插入操作,得到队列中对应的name元素的v值为k,查询第k+v个元素的v值是多少 题解: 已知,对于插入操作,我们需要很快的查询…
链接:https://www.nowcoder.com/acm/contest/143/J 来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 262144K,其他语言524288K 64bit IO Format: %lld 题目描述 There are n students going to travel. And hotel has two types room:double room and triple room. The price of a double…
链接:https://www.nowcoder.com/acm/contest/144/J来源:牛客网 skywalkert, the new legend of Beihang University ACM-ICPC Team, retired this year leaving a group of newbies again. Rumor has it that he left a heritage when he left, and only the one who has at lea…
题目链接:https://ac.nowcoder.com/acm/contest/886/J 题目大意 略. 分析 见代码. 代码如下 #include <bits/stdc++.h> using namespace std; #define INIT() ios::sync_with_stdio(false);cin.tie(0);cout.tie(0); #define Rep(i,n) for (int i = 0; i < (n); ++i) #define For(i,s,t)…
J - Symmetrical Painting 题意 给你\(n\)个矩形, 左下角\((i-1,\ L_i)\), 右上角\((i,\ R_i)\), 找一条线\(l\)平行于\(x\)轴, 让这些矩形根据\(l\)对称,不对称的部分删去,问最大的对称图形的面积是多少? 思路 主要就是要枚举对称轴啦,从小到大枚举\(L_i.(L_i+R_i)/2.R_i\),这三种位置为对称轴. 那枚举的时候要怎么维护矩形面积. 首先可以把\(L_i*2.R_i *2\),这样取中间不会出现误差. 然后分别…
题意:一个n×m的农田, 每个小格子都有一种作物, 现在喷t次农药,每次农药覆盖一个矩形, 该矩形里面与农药类型不同的植物都会死掉, 求最后植物的死亡数是多少. 题解:二维树状数组. 每次喷农药的时候将这个覆盖的区间加一. 然后对于[1,n*m]的植物, 先删除同种植物的同种农药对区间的影响, 然后查询该种植物的是否被标记过了 即 该位置的值 > 1, 最后处理完这种植物再把这种植物的农药再加回去. 代码: #include<bits/stdc++.h> using namespace…
题意 一张无向图,每条边有权值,可以选择不超过 $k$ 条路使其权值变成0,求 $S$ 到 $T$ 的最短路.(同洛谷 P4568) 分析 首先,分层图最短路可以有效解决这种带有 「阶段性」的最短路,这是分层图最短路的模板题. 建立 $0~k $ 层相同的图,每层之间相邻的节点之间也用权值为0的边相连(具体操作见代码).第 $k$ 层表示已经将 $k$ 条道路置为0.最终把每层的终点连向一个超级汇点.最短路就是从第 $0$ 层源点到超级汇点的最短路. #include<bits/stdc++.h…
题意: 有n个技能,一开始都是0级,第i个技能从j-1级升到j级,花费$c_{i,j}$,但是花费不一定是正的 所有的技能升到j级时,奖励$d_j$但是奖励也不一定是正的 题解: 用sum[i][j]储存-c[i][j]的前缀和,即技能i升到j级后总共的收益. 再用w[j]储存f[j]的前缀和,代表所有的技能都升到j的收益. 再开一个数组maxxx[i][j]用于储存技能i至少升到j级的收益,即max(sum[i][j~m]). 然后枚举j,计算$w_j+\sum_{i=1}^{n}maxxx[…