由於資料範圍,所以考慮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...