国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

hdu2580 a simple stone game

2019-11-11 00:45:09
字體:
來源:轉載
供稿:網友

f(n,m) 表示剩余個石子且這次最多取時的NP 狀態,顯然這個函數在上是單調的,同時狀態的轉移產生一條對角線且隨著的增大逐漸右移,故從下到上可以在O(n) 下算出某個點的狀態。

然而這并沒什么卵用,因為這道題的n≤10 8  

考慮k=2 時的情況,點集合為斐波那契數列。觀察這個規律的證明: 由Zeckendorf定理可知,任意正整數可以表示為不相鄰的斐波那契數的和且這個組合對每個數唯一。設MIN(x) 表示用斐波那契數分解之后的最小的數,以下欲證f(n)=min{i|f(n,i)=P}=MIN(n) 。 顯然f(2)=1=MIN(2) ,以下對進行歸納。 對于0<x<MIN(n) ,注意到MIN(n?x)=MIN(MIN(n)?x) 。 (1)因為MIN(MIN(n)?x)≤2x ,故0<x<MIN(n) 的轉移一定達到點。 (2)因為MIN(n-MIN(n))>2MIN(n)MIN(n?MIN(n))>2MIN(n) ,故此時轉移到了P點。 其中(1)的證明很模糊,將會為k/ge 2k≥2 的情況進行詳細的證明,故略去。

從k=2k=2 的證明想到,為任意的k構造一個數列A,使其可以同樣地唯一表示[1,n][1,n] 的數同時相鄰數比大于。構造很簡單: 設X i  表示A i  可以分解[1,X i ] 的數,那么A i+1 =X i +1 X i+1 =X i +1+X j |max{j|A i+1 A j  >k} X i+1 X i+1 A i+2 ?1A i+2 A i  =X i +X j +1=A i+1 +X j =A i+1 +A j+1 ?1=A i+1 +A j+1 =A i?1 +A j |min{j|A i?1 A j  ≤k}   以下證明對于任意A i =a+b MIN(a)b ≤k 。 設A j i   表示對于A i ?1 的從小到大第個分解。 從b=1 開始推導,此時MIN(A i ?b) 都會落在[1,k] 上,故成立。 此后產生A j 1   次減1,期間顯然成立。 當b=A j 1  +1 時,在之前的MIN 被完全消去,也就是說,此時的MIN(a) 變為A j 2   ,同時,由于j 1 =max{j|A j 2  A j  >k} ,故此時kb≥A j 2  =MIN(a) 。 而之后在A j 2   被完全消去之前,都保持滿足kb≥MIN(a) ,因為這期間產生的所有MIN 都小于A j 2   。 在A j 2   被完全消去時,推導同對A j 1   的推導,即當A j i   被消去時,b=A j i  +1 

故對于k>2 ,可以采用與k=2 時的證明相同的方法證明f(n)=MIN(n) 。 那么生成了之后就可以貪心分解,即可得出結果。 生成所需的復雜度為O(|A|) A i A i?1   =A i?1 A i?1  +A j A i?1  =1+A j A i?1  ≥1+1k    故總的復雜度為O(log 1+1k  n) 

#include<iostream>using namespace std;typedef long long ll;int ar[2000010],n,k,ct=0;void cl(){ int i,a;for(scanf("%d %d",&n,&k),ar[1]=1,i=2,a=1;ar[i-1]+1<n;++i){ for(;(ll)ar[a]*k<ar[i-1];++a); ar[i]=ar[a]+ar[i-1]; }
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 灵台县| 惠水县| 资兴市| 辽中县| 永胜县| 巴林右旗| 玉溪市| 乌审旗| 鹰潭市| 平南县| 惠州市| 兰溪市| 女性| 德江县| 吴忠市| 河曲县| 荆州市| 嘉峪关市| 怀集县| 宣威市| 盐边县| 桓仁| 龙井市| 石狮市| 南靖县| 曲沃县| 读书| 会理县| 衡南县| 凌海市| 安乡县| 星子县| 太仓市| 独山县| 承德县| 石楼县| 福海县| 府谷县| 隆安县| 台南县| 峨边|