码迷,mamicode.com
首页 > 其他好文 > 详细

CF1107

时间:2019-02-02 21:54:59      阅读:220      评论:0      收藏:0      [点我收藏+]

标签:完全   数位   先后   还款   长度   暴力   提交   span   表示   

我哭了......什么鬼题我怎么都不会...果然教育场是教我做人的...

打的虚拟赛,286名...太菜了。EF都是可做题我都没写出来...

B:设g(i) = i的各位数字之和,f(i) = g(i) < 10 ? g(i) : f(g(i))

多组询问,每次求g(i) = x的第k大的i。k <= 1e12

解:这题一开始把我看得一愣一愣的,啥玩意?数位DP?怎么放在第二题?

然后冷静下来打了一波表,发现是个SB找规律......从1开始每个数的g()值一定是12345....912...912...9.....

这就很OK了,输出9(k-1)+x即可。

C:给定字符串,每个位置都有一个权值。

你要选出一个子序列,使得这些位置上的权值和最大,且没有哪个字符连续出现超过k次。

权值非负。

解:稍加思索......直接堆啊!每连续的一段贪心选最大的k个即可。

(如果权值可以为负怎么办?首先肯定可以暴力DP,f[i][j][k]表示前i个选j个,第i个必须选,末尾有连续k个s[i]的最大权值。DP优化...不会...复杂度更优的做法......不会...)

D:给定n x n的01矩阵,你要尝试把它压缩,每x x x个字符压缩成一个字符,要求这x2个字符全部一样。

显然x必须是n的约数。求最大的x。

解:稍加思索...好像直接n2gcd就行啊?这么简单?

x必须是每行/列所有连续段的长度的约数。

感觉没错就写了。为了加速把gcd记忆化了。然后就A了...

E:给定长为n的01序列与数组a。

你每次可以选择其中连续的一段0或1消掉,如果长度为x则能够得到a[x]的收益。求最大收益。

a[x]非负,n <= 100。

解:我是SB系列......

看到题就想到了区间DP,比如啥神题ZUMA......尝试一下。

f[i][j][k]表示[i, j]这一段后面接长为k的0/1时完全消除的最大收益,发现完全不行...弃疗了。

看题解,发现是f[i][j][k][0/1]表示把[i,j]这一段消成k个0/1的最大收益,这样就可行了......

F:有n个贷款,你可以在每个月初选择第i个贷款,得到ai,之后的ki个月就要每个月底还款bi(包括本月)。

你会在某个月中间携巨款潜逃,求你最多能带走多少钱。

每个月只能贷一笔款,每笔贷款也只能被贷一次。n <= 500

解:回想起修车的套路,我们可以计算在潜逃前i个月贷j的收益是a[j] - b[j] * min(i - 1, k[j])

然后想到一个类似背包的DP,可以设f[i][j]表示潜逃前j个月只贷前i笔款时的最大收益。

然后发现我凉了。。。原因是贷款的顺序跟背包不一样,背包无序,这个有序。

然后发现可以费用流,兴冲冲打了一波,TLE...

结束后发现是KM,赶快去现场学一波...TLE

我疯了。看别人的提交,TM是DP......

还是之前那个状态,但是多了个排序,按bi排序!我是大SB...

我的理解是这样的,对于每个贷款你显然有三种选择,要么老实还钱,要么畏罪潜逃,要么不去选。

现在考虑两个畏罪潜逃的贷款的先后顺序。

两个的ai都选了,所以就只跟bi有关了,所以bi大的应该越晚越好。

这样就可以DP了......

CF1107

标签:完全   数位   先后   还款   长度   暴力   提交   span   表示   

原文地址:https://www.cnblogs.com/huyufeifei/p/10349228.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!