先爆搜一發,tle,然後改成記憶化搜尋,就一直wa
![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLiQ3chVEa0V3bT9CX5RXa2Fmcn9CXwczLcVmds92czlGZvwVP9EUTDZ0aRJkSwk0LcxGbpZ2LcBDM08CXlpXazRnbvZ2LcRlMMVDT2EWNvwFdu9mZvwVP9EkT6lEVNdXVyoldWNjWvx2MaZXUYpVd1kmYr50MZV3YyI2cKJDT29GRjBjUIF2LcRHelR3LcJzLctmch1mclRXY39zM1EjMzQTM0ETMwATM3EDMy8CX0Vmbu4GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.jpg)
http://blog.csdn.net/keyboarderqq/article/details/51960464
看了大佬代碼,發現我少寫一個狀态。。。相比dp,記憶化搜尋還是比較好寫的,思路也不難。
#include <bits/stdc++.h>
using namespace std;
const int MAXN = ;
int num[MAXN],n;
int dp[MAXN][];
int dfs(int cnt, int pre)
{
if(cnt == n)
return ;
if(dp[cnt][pre] != -)
return dp[cnt][pre];
int ret = ;
ret = min(ret,dfs(cnt+,)+);
for(int i = ; i <= ; ++i)
{
if(i == pre) continue;
if(!(i&num[cnt])) continue;
ret = min(ret,dfs(cnt+,i));
}
return dp[cnt][pre] = ret;
}
int main()
{
ios::sync_with_stdio(false);
cin >>n;
memset(dp,-,sizeof(dp));
for(int i = ; i < n; ++i)
cin >> num[i];
cout << dfs(,) << endl;
return ;
}