适合两种情况:
- 可预先确定每个状态的元素个数N;
- 状态元素的可能值为一个连续的值域;
暴力算法的改进:
- 减少搜索状态的总数;
- 利用有效信息减少重复计算;
- 将原问题转化为更小的问题;
- 根据问题的性质进行裁剪;
- 引进其他算法策略;
求一个字符串的元素的所有组合
如“1,2”为:{},{1},{2},{1,2}
每个元素有取和不取两种方式,所以可以用位来表示。
int fun(string s)
{
int n = (1 << s.size());
int i = 0;
int j = 0;
int len = s.size();
for (i = 0; i < n; ++i) {
for (j = 0; j < len; ++j) {
if ((i >> j) & 1) cout<<s[j];
}
cout<<endl;
}
return 0;
}