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

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

hdu2580 a simple stone game

2019-11-11 02:00:21
字體:
來源:轉載
供稿:網友

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]; }
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 重庆市| 湟中县| 长葛市| 绩溪县| 宁远县| 桂东县| 莱芜市| 靖江市| 马公市| 政和县| 宁乡县| 太仆寺旗| 丹巴县| 八宿县| 海口市| 镇沅| 永胜县| 丹江口市| 蓬莱市| 华亭县| 射阳县| 沿河| 秭归县| 大足县| 宁河县| 安溪县| 宣恩县| 平塘县| 怀柔区| 容城县| 黄浦区| 教育| 宽城| 望城县| 台东县| 溆浦县| 九寨沟县| 社旗县| 广宁县| 武汉市| 师宗县|