151104的测试总结

12 篇文章 0 订阅
7 篇文章 0 订阅

第一题

【题目及题号】number superoj1002
【题解】
题意大概是求前R个由不同的三次幂组成的数的和。
考虑转换成三进制。
那么就会发现和项数有关。
1:—-1
2:—3-
3:—31
4:—9—
5:—9-1
6:—93-
……
看上去非常像二进制的递增。所以我们可以统计第i位上的 3i1 分别出现了多少次。

我的做法是递归去求。
对于R,找到一个最大的 2k ,满足 2k <=R,那么

ans=ans+2k1ik13i

多出来的那一部分如果除去最高位的贡献,
ans=ans+(R2k+1)3k

就可以去递归求解 R2k 了。
【注意】
据说本题中间过程爆longlong要开unsigned;然而我没有开也过了Orz。

第二题

【题目及题号】dp superoj1003
【题解】
本题其实是一道做过的题,但是我没有A掉,只拿了70分我感到非常地抱歉。Orz我对不起党和祖国还有人民,对不起我自己。
因为本题要求最大化最矮的高度,所以考虑二分。
那么如何验证这个高度是否合法呢?我们可以使用DP,对于第i位预处理出它前面k位(含)状态为j的高度。
转移的时候删掉一位插入一位状态,求一个满足高度的最小花费。

    f[i+1][(j>>1)|(1<<(k-1))] = min(f[i+1][(j>>1)|(1<<(k-1))],f[i][j]+c[i+1];
    f[i+1][(j>>1)|(1<<(k-1))] = min(f[i+1][(j>>1)|(1<<(k-1))],f[i][j]);

【注意事项】
1.对于前驱状态j当前第i位的高度要预处理。

2.即使遇到做过的题也不要窃喜,因为你很有可能想掉最关键的东西。
比如今天,我忙着去想起了状态,忘掉了最重要的二分。

第三题

【题目及题号】change superoj1004
【题解】
本题一看就是傻逼题。建立一个映射,每次交换就可以交换映射,对于x,y输出a[ys[x]][ys[y]]即可。

【注意事项】

1.非常重要的一点:注意数据不合法,要跳空格!!!
2.对拍不仅要拍主程序,最好读入方式也区别一下。(有时间的情况下)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值