2018年8月8日训练日记

HDU 5385 The path(贪心)题意:一张图有N个顶点,给出一些有向边,问该如何给这些边赋值才能满足 存在x,d(1) < d(2) < ….d(x) > d(x+1) > …d(n) 的条件且1为起点,d(x)表示1到x的最短距离。 赋值的范围在1~N。特殊的,d(1) < d(2) < …. <d(n)也可以。d(1)刚开始为0。这道题看的第一眼觉得能做,但是没有什么清晰地思路。注意到最短路上一条有向边的权值c(u,v)==d[v]-d[u]。因此就可以贪心了。l从1开始,r从n开始,初始化vis[1]=1,设置一个val=1。然后每次对于l和r,如果vis[l]或者vis[r]=1,就去遍历l、r连接的未标记的点分别标记为l,r。(这样vis[v]=u就表示边(u,v)在最短路上了)对d[l]、d[r]赋值val++。l++、r--。这样最终在最短路上的边的权值即为d[v]-d[u],其他的都为n。(最短路上,d[v]一定是大于d[u]的。)

HDU 5386 Cover(暴力)给你两个图,第二个图是第一个图刷过之后的图。接下来给m个操作,每次操作把某一行或某一列刷成一种颜色。保证存在合法操作序列,让你求出任意一个来。只需要暴力倒着求就行,原图没用,只需要判断那一行那一列是否都是这个颜色或为0即可。若是,加入答案中,那一行(列)都置为0。我用了set仅31ms就过了。

HDU 5387 Clock(模拟)给你一个时间,求时针与分针、秒针和分针与秒针 的夹角。结果用分数表示。由于用分数表示,转化成小数就凉了,于是可以先乘以一个较大的数。。。然后分别计算三个针与12点的夹角。注意钝角的时候要化为锐角。(用180度减)题解参考这里

HDU 5389 Zero Escape(DP)题意:给你n个人,然后是A,B,分别代表两个门的值。然后第二行给出了n个人的价值,问你要使这n个人全部进入门中(可以全进A,全进B,或是AB门都有人进),问你总共有几种方法(所有人进去后进去后两个门的值正好等于所有人的价值%9)(答案取模)。但是要注意这里的价值并不是仅仅加起来就好了,这里是要把它加起来直到为一个个位数。显然是dp。

定义:dp[i][j]为前i个人中然后取得的价值为j的方案数。

状态转移方程:dp[i][j]=dp[i-1][j]+dp[i-1][j-idx[i]](j>=idx[i]),dp[i][j]=dp[i-1][j]+dp[i-1][j+9-idx[i]](j<idx[i])  后者便是本题坑点。

前一个方程的含义是等于i-1个人取得j的方案数加上i-1个人取得j-idx[i]的方案数,因为这里相当于是01背包,我们在这里是在第i个人的时候才取的idx[i]这个价值。后一个方程的含义是原来的值j加上idx[i]后取模就变了。所以要加上9。

还要分情况:

1、所有人全部进入到B中。

2、把人员分配到A与B中去,这里也同时算上了人员全都进入了A的情况。我们最后只需要取一种dp[n][A]就可以了,因为其余的人必定要进入到另一个B中去的。所以方案数就是dp[n][A]。

3、当第二种不成立时,那么我们要把人员都分配到A中去。为了计算的方便,我们把第二种不成立的就另外分开来到第三种情况中去。最后别忘了mod就好。题解参考这里

然后多校虽然没崩,不过罚时上天了。最成功的在于成功推出了正确的结论,然后通过了狼人杀那道题。这次简直就是高中生专场,好在学聪明了直接上网找结论,前两道题过得也不算太慢,还行。。。然后剩下的题有机会补一补。今晚打cf,继续加油。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值