https://dmoj.ca/problem/dmpg17b5
https://dmoj.ca/problem/dmopc19c5p4
这个题目要找排序最低的,但是钞能力要足够被打劫的人。因为sub case很多,所以要把钞能力提前算出来,每个case分别用二分进行查找。
使用二分的一个前提条件就是函数的单调性,如果不是单调的,就不能使用二分。
题目给出的测试数据,把每个人的钞能力排序后得到的数是2 3 6 6 7,这样满足单调性,程序调试成功。
但是给一个不满足单调性的测试,就不能简单使用二分了,需要对钞能力取pre max,这样就能满足单调性,可以使用二分了
这些人的排序如下:
10 80 5 20 10 40
0 0 1 1 2 0
那么调整过的钞能力就是10 80 15 30 90 40,不能二分,但是取pre max就可以了10 80 80 80 90 90
for (int i=1;i<n;i++){
pmax[i]=m[i];
if(v[i]!=0){
pmax[i]+=pmax[v[i]-1];
}
pmax[i]=max(pmax[i],pmax[i-1]);
}
https://dmoj.ca/problem/aac1p6
https://dmoj.ca/problem/dmopc20c3p4
https://dmoj.ca/problem/dmopc20c4p4
https://dmoj.ca/problem/dmopc23c1p4
https://dmoj.ca/problem/dmopc16c3p6
Leave a Reply
You must be logged in to post a comment.