送禮物 Page111 雙向搜尋 二分

2021-10-05 06:01:11 字數 1727 閱讀 8989

真是無語,一開始取[1,

n/2]

,[n/

2+1,

n]

[1,n/2],[n/2+1,n]

[1,n/2

],[n

/2+1

,n]一直tle過不了,就很納悶

後來取了[1,

n/2+

2],[

n/2+

3,n]

[1,n/2+2],[n/2+3,n]

[1,n/2

+2],

[n/2

+3,n

]就過了,很玄學。

雙向搜尋降低指數複雜度,得滿足始態,終態搜尋到一半會發生互動的條件

**

#pragma gcc optimize(1)

#pragma gcc optimize(2)

#pragma gcc optimize(3,"ofast","inline")

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#define ll long long

#define ull unsigned long long

#define pb push_back

#define rep(x,a,b) for (int x=a;x<=b;x++)

#define repp(x,a,b) for (int x=a;x#define w(x) printf("%d\n",x)

#define ww(x) printf("%lld\n",x)

#define pi 3.14159265358979323846

#define mem(a,x) memset(a,x,sizeof a)

#define lson rt<<1,l,mid

#define rson rt<<1|1,mid+1,r

using namespace std;

const

int maxn=

1e7+7;

const

int inf=

1e9;

const ll inff=

1e18

;int a[maxn]

,n,m=

0,w;

ll ans=

0,b[maxn]

;bool cmp

(int a,

int b)

void

dfs1

(int pos,ll now)

dfs1

(pos+

1,now+a[pos]);

dfs1

(pos+

1,now);}

void

dfs2

(int pos,ll now)

dfs2

(pos+

1,now+a[pos]);

dfs2

(pos+

1,now);}

intmain()

送禮物 題解

這道題目是到毒瘤題。首先我們至少去l個,所以我們可以把小於l的用單調佇列直接求出。對取l r個。顯而易見的是左右兩端必分別是這個區間的最小值和最大值。我們可以用01分數規劃。不放令結果最後為ans,則有 a j ans j a i ans i ans k 所以我們就可以愉快地分數規劃啦。includ...

swift送禮物動畫

最近做了乙個用swift寫的送禮動畫,這個動畫本來是在專案中用到的,然後專案改了需求用不上了就想到用swift封裝一下以後如果用得到可以借鑑下。想看下效果圖 思路 1.首先建立乙個動畫的資料model。struct animationmodel iflet giftname dict giftnam...

送禮物 雙向dfs

思路 dfs 先把a陣列排序,由大變小 dfs出前n 2 2 可以湊出的數,放到陣列s中 把s陣列去重排序,行成乙個單調遞增序列 再dfs剩下的數 可以組成的數,每組成乙個,二分找s陣列匹配的最大值 include includeusing namespace std typedef long lo...