emmm.昨天刚到青岛.今天热身赛结束.非常想记录的一点就是.这个酒店太豪了.早餐特别豪.还有浴池.orz.要加油努力赚钱买大房子呀.补了一下题.记录一下.
河北工业大学ACM集训队日常训练day1030
原:Codeforces Round #490 (Div. 3)
A.Mishka and Contest
题目大意:
easy~
题解:
easy~
1 |
|
C.Alphabetic Removals
题目大意:
easy~
题解:
easy~
1 |
|
E.Reachability from the Capital
题目大意:
有一个有向图.求最少添加几条边使得从s可以到达其他所有点.
题解:
(1)dfs标记所有从s可达的点是good
(2)对于每个bad的结点.统计其他同样是bad的结点可以到达它的数量.v结点计算出的值是cnt(v)
(3)一次遍历非增序列cnt(v),从大到小遍历.如果它还是bad.从它dfs.标记所有可达的
点是good.ans加1.相当于加了一条边(s,v)
1 |
|
F.Cards and Joy
题目大意:
有n个人.有k*n张牌.第i张牌的权值是c_i
第j个人喜欢的数字是f_j
有一个等级序列.h1,h2,…,hk
每个人发k张牌.如果对于第j个人.
他分到的牌的权值是他喜欢的数字f_j
的牌的数量是t.他的等级就是h[t].
注意h[0] = 0.
求一种方案.使得n个人的等级和最大
输出最大的等级和.
题解:
如果喜欢某个数字的人数是x.这个数字的卡牌有y个.
也就是这y张卡牌怎么分给这x个人使得等级之和最大.
可以看出.和数字本身是几没有关系.只和x,y有关系.
dp[x][y] ::= 喜欢某个数字的人数是x(0 <= x <= n),
是这个数字的卡牌有y(0 <= y <= k*n)张时候最优的方案
得到等级和最大.如果我们求出了dp[x][y].
$ans = \sum_{i = 1}^{1e5} dp[f[i]][c[i]]$
容易知道dp[0][y] = dp[x][0] = 0.
状态转移方程:
$dp[x][y] = \max dp[x-1][y-i] + h[i], 0 <= i <= k$
解释一下:
就是有x个人y张牌的时候的最大值.是安排第x个人i张喜欢的牌.
加上剩下x-1个人安排y-i张牌.类似背包
时间复杂度$O(n^2*k^2)$
1 |
|