警撅后人:如果你只WA Subtask 10
  • 板块P4983 忘情
  • 楼主Ctrl加C
  • 当前回复0
  • 已保存回复0
  • 发布时间2024/2/28 21:10
  • 上次更新2024/2/28 23:02:17
查看原帖
警撅后人:如果你只WA Subtask 10
448897
Ctrl加C楼主2024/2/28 21:10

一个问题是,你可能忽略了转移时出现的斜率平台问题。这会导致你二分时可能会被卡掉。

就例如这样的二分能通过此题:

while(l<=r){
		int mid=(l+r)>>1;
		check(mid);
		if(num[n]<=m)r=mid-1,val=mid;
		else{
		//	val=mid;
			l=mid+1; 
		}
	}

但这样的就通过不了:

while(l<=r){
		int mid=(l+r)>>1;
		check(mid);
		if(num[n]<m)r=mid-1;
		else{
			val=mid;
			l=mid+1; 
		}
	}

其中一种可行的解决方案是:你在dp时强制它选择其中平台的一端。

或者你也可以用上面两种二分分别跑一次,最后取最小值。只不过常数也会乘2。

2024/2/28 21:10
加载中...