典型的折半列舉法
本質上是用空間換時間的思想,把一半的資料搜過之後用陣列儲存起來,
搜另一半的時候就可以直接使用了
這樣就可以把時間複雜度由乘轉變為和
效率改善非常大哦
#include#include#include#include#include#include#define maxn 35using namespace std;
int n,m;
int a[maxn];
int l,r;
int ans=0x7fffffff;
mapp;
void dfs1(int k,int s,int c)
} else
for(int i=k;i<=l;i++) }}
void dfs2(int k,int s,int c)
for(int i=k;i<=r;i++) }}
int main()
sort(a+1,a+n+1);
l=n/2; r=n;
dfs1(1,0,0);
dfs2(l+1,0,0);
printf("%d",ans);
return 0;
}
Codevs 2144 砝碼稱重 2
時間限制 1 s 空間限制 16000 kb 題目等級 鑽石 diamond 題解有n個砝碼,現在要稱乙個質量為m的物體,請問最少需要挑出幾個砝碼來稱?注意乙個砝碼最多只能挑一次 輸入描述 input description 第一行兩個整數n和m,接下來n行每行乙個整數表示每個砝碼的重量。輸出描述 ...
codevs 2144 砝碼稱重 2(搜尋 剪枝)
codevs 2144 砝碼稱重 2 題目描述 description 有n個砝碼,現在要稱乙個質量為m的物體,請問最少需要挑出幾個砝碼來稱?注意乙個砝碼最多只能挑一次 輸入描述 input description 第一行兩個整數n和m,接下來n行每行乙個整數表示每個砝碼的重量。輸出描述 outpu...
OI刷題記錄
2014 4 18 poj3264 bzoj1699 balanced lineup rmq 2014 4 19 bzoj1012 jsoi2008 最大數maxnumber noi2004 鬱悶的出納員 bzoj3224 tyvj 1728 普通平衡樹 2014 4 20 bzoj1862 105...