191031 基礎測試(dp 搜尋剪枝)

2021-09-29 05:07:43 字數 1510 閱讀 2151

由於資料範圍,所以考慮o(n

logn

)o(nlogn)

o(nlog

n)的演算法來求最長不下降子串行

#include

using

namespace std;

intread()

for(

;isdigit

(ch)

;ch=

getchar()

) re=

(re<<3)

+(re<<1)

+ch-

'0';

return re*f;

}int n,a[

1000009

],len,b[

1000009];

intmain()

printf

("%d"

,n-len)

;return0;

}

搜尋剪枝

1,可行性剪枝,超重了直接return

2,最優化剪枝,如果當前maxn+還沒選的貨物的價值總和都已經小於或等於ans了,直接return

#include

using

namespace std;

int n;

double a[34]

,b[34

],sum[34]

,m,ans;

bool bj[34]

,vis[34]

;void

dfs(

int cur,

double maxn,

double wei)

return;}

vis[cur]=1

;dfs

(cur+

1,maxn+b[cur]

,wei+a[cur]);

vis[cur]=0

;dfs

(cur+

1,maxn,wei)

;return;}

intmain()

搜尋剪枝

1,按任務的時間大小降序排序,這樣可以快速去掉無用分支

2,最優化剪枝,如果當前要花的時間,已經超過ans了,直接continue

#include

using

namespace std;

int used[

100]

,a[100

],ans,n,p;

bool

comp

(const

int&a,

const

int&b)

void

dfs(

int cur,

int time)

for(

int i=

1;i<=p;i++)}

intmain()

滑雪(dp 深搜)

time limit 1 ms memory limit 128 mb difficulty 3 trs喜歡滑雪。他來到了乙個滑雪場,這個滑雪場是乙個矩形,為了簡便,我們用r行c列的矩陣來表示每塊地形。為了得到更快的速度,滑行的路線必須向下傾斜。例如樣例中的那個矩形,可以從某個點滑向上下左右四個相鄰...

數字組合(dp 深搜

給定n個正整數a1,a2,an,從中選出若干個數,使它們的和為m,求有多少種選擇方案。輸入格式 第一行包含兩個整數n和m。第二行包含n個整數,表示a1,a2,an。輸出格式 包含乙個整數,表示可選方案數。資料範圍 1 n 100,1 m 10000,1 ai 1000 輸入樣例 4 41 1 2 2...

acm基礎1 深搜與寬搜

deep first search void dfs adjlist adj,int v,int visited adj is a adjlist,v is the no.of first point,visited is a assistant array int i struct edgenod...