#include
using namespace std;
#define mod 1000000007
#define pi acos(-1.0)
#define inf 0x3f3f3f3f
typedef long long ll;
typedef unsigned long long ull;
ll dp[25][25][3];
//dp[pos][cnt][k]代表在pos位置之前填了cnt個性質為k(1為奇數,2為偶數)的連續的數
//pos為當前處理的數字(權重表示法,也就是剩下pos+1位待填數)
//ok-狀態;
//lim-後面的數是否可以任意填,1-不可以,0-可以
int num[25];
ll dfs(int zero,int
pos,ll cnt,int ok,int lim)
int n=lim?num[pos]:9;
ll ans=0;
if(!lim&&dp[pos][cnt][ok]!=-1)return dp[pos][cnt][ok];
for(int i=0;i<=n;i++)
if(ok==0)
else
}if(ok==1&&i%2==1)
if(ok==2&&i%2==0)
}if(!lim)
dp[pos][cnt][ok]=ans;
return ans;
}ll cal(ll x)
ll ans=dfs(0,len,0,0,1);
return ans;
}int main()
return
0;}
hdu3555(數字dp記憶化搜尋)
記憶化搜尋解法 include include int64 dp 25 3 dp pos pre pos記錄位數 pre記錄字首狀態0表示字首不包含49且pos 1不是4 1表示字首不包含49且pos 1位是4 2表示字首包含49 int digit 25 存數的各位上的數字 int l 存數的位數...
hdu 3709(數字dp 記憶化搜尋)
平衡數 這道題比較難吧 和以往的數字記憶化搜尋設計的狀態不太一樣 也是用的記憶化dfs 熟練之後應該就沒太大問題了 include include int64 dp 20 20 2010 pos 數字位置 v支點的位置 s 力矩的數值 int digit 20 int64 dfs int pos,i...
hdu 5179 數字dp 記憶化搜尋
dp i j 記錄第i位為j時在非限制條件下的符合條件數的個數 那麼在記憶化搜尋中標記當前狀態是否有限制,當前狀態下是否為 因為最終如果非 要返回1,是0返回0 因為最終要求的數 的取值範圍不包括0 那麼求取時直接算取get m 和get n 1 即可求解 include include inclu...