训练赛20160403
训练赛20160403
5:00:00
Current Time: | 2016-04-03 20:17:54 | Contest Type: | Public |
Start Time: | 2016-04-03 12:00:00 | Contest Status: | Ended |
End Time: | 2016-04-03 17:00:00 | Manager: | hrbustacm |
ID
|
Origin
|
Title
| ||
---|---|---|---|---|
![]() |
47 / 82 | Problem A | FZU 2212 | Super Mobile Charger |
![]() |
29 / 84 | Problem B | FZU 2213 | Common Tangents |
![]() |
24 / 111 | Problem C | FZU 2214 | Knapsack problem |
Problem D | FZU 2215 | Simple Polynomial Problem | ||
![]() |
10 / 46 | Problem E | FZU 2216 | The Longest Straight |
Problem F | FZU 2217 | Taxi | ||
![]() |
3 / 7 | Problem G | FZU 2218 | Simple String Problem |
![]() |
6 / 20 | Problem H | FZU 2219 | StarCraft |
Problem I | FZU 2220 | Defender of Argus | ||
![]() |
29 / 95 | Problem J | FZU 2221 | RunningMan |
A题水题
B题一划就出来,水题
C: 01背包变形,,正常的01背包第一层循环都是枚举背包容量,因为B的范围过大,所以我们枚举价值
dp[j]=min(dp[j],dp[j-value[i]]+weight[i]);
我们控制dp中的j为value,毕竟value总和题已给出范围《=5000,可以接受,dp[j],代表在获得价值为j的时候,我的背包的重量是多少,之后我们逆序枚举价值,,,第一个符合背包容量的输出即可
E: 暴力,,,我们用队列维护暴力过程中0的个数,当0不够时,我们从前面pop(),维护好0的个数问题和总长度就可以了
G:状压dp,比赛的时候没做出来,刚才单独发了
H: 哈夫曼树的原理,,我们将工人分裂的过程抽象为1棵树,,我们利用优先队列,每次pop出键值最小的就可以了,从叶子往根部一步步构造哈夫曼树,维护最大值,结果根节点的值就是答案(每次
从两个子节点生成父节点的时候注意加上k值
)
J: 水 题:判断m奇偶性就出来了
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~