我們容易證明,fmin是乙個非嚴格單峰函式。
對於乙個xi,隨著y的增大,它的貢獻先是乙個減量,再是乙個為0的常量,最後是乙個增量。隨著y的增大,fmin的增量應該是增量和減減量和。因為每乙個都是由增量變成減量,因此fmin的增量越來越大,所以fmin單峰。因為平板的存在,fmin只能算是非嚴格單峰函式。
因此我們考慮三分出極值,再二分出取值範圍。
三分在有平板的情況下好像是錯的?例如在極點右端造一大段平板,那麼如果兩個三分點都卡在這段平板上,把左端調整會使得我們錯過極點。
但是這題三分沒有錯,為什麼?
如果出現了平板,此時fmin的增量就是0。這題fmin的增量是單調的,增量為0說明是一條切線,這個時候平板處一定是極值。
#include
#include
#define fo(i,a,b) for(i=a;i<=b;i++)
#define fd(i,a,b) for(i=a;i>=b;i--)
using
namespace
std;
typedef
long
long ll;
const
int maxn=100000+10;
int l[maxn],r[maxn];
ll ans;
int i,j,k,l,r,mid,mid1,mid2,t,n,m,mi,mx,ansl,ansr,id;
int read()
while (ch>='0'&&ch<='9')
return x*f;
}ll f(int x)
return t;
}int main()
else
if (r-l==2)
mid1=l+(r-l+1)/3;mid2=l+(r-l+1)/3*2;
if (f(mid1)else l=mid1;
}id=l;
ans=f(id);
l=mi;r=id;
while (l2;
if (f(mid)>ans) l=mid+1;else r=mid;
}ansl=l;
l=id;r=mx;
while (l1)/2;
if (f(mid)>ans) r=mid-1;else l=mid;
}ansr=l;
printf("%d %d\n",ansl,ansr);
}
jzoj4882 多段線性函式
雖然題目很難看懂,但還是很良心的,因為給了我們乙個啟發 峰值是一段區間.把x的取值範圍想象為 框 fmin y 這個函式就是求y到每個框的最小距離之和.不難發現fmin y 是乙個不嚴格的單峰函式,即峰值不止乙個點.因為答案一定是在某個框內或不在框內,對於第一種情況,在答案 l,r 之間時,左右是平...
多特徵線性回歸
一,單一特徵線性回歸二,多特徵線性回歸 當有很多因素來決定房價的時候,如圖 我們就需要更多的未知數和係數來表示結果,在這之前需要普及一些表示式的含義,如圖 n表示影響因素 特徵向量 的個數,m表示元組個數,上標 i 表示第i個元組,我們可以用矩陣來表示,下標j表示第j個因素 特徵向量 同單一特徵線性...
多線性的實現
線性的建立 pthread create函式 函式的作用 建立執行緒 表頭檔案 include 函式原型 int pthread create pthread t restrict tidp,const pthread attr t restrict attr,void start rtn void...