先貼個模板:
typedef
long
long ll;
int a[20];
ll dp[20][state];//不同題目狀態不同
ll dfs(int pos,/*state變數*/,bool lead/*前導零*/,bool limit/*數字上界變數*/)//不是每個題都要判斷前導零
//計算完,記錄狀態
if(!limit && !lead) dp[pos][state]=ans;
/*這裡對應上面的記憶化,在一定條件下時記錄,保證一致性,當然如果約束條件不需要考慮lead,這裡就是lead就完全不用考慮了*/
return ans;
}ll solve(ll x)
return dfs(pos-1
/*從最高位開始列舉*/,/*一系列狀態 */,true,true);//剛開始最高位都是有限制並且有前導零的,顯然比最高位還要高的一位視為0嘛
}int main()
}
ac**:
#include
using
namespace
std;
typedef
long
long ll;
const
int maxn = 1e6 + 4;
const
int mod = 1e9 + 7;
const
int inf = 0x3f3f3f3f;
int n, m, cnt;
int dp[100][10];//dp[i][j]表示第i位且前一位是不是6的情況的解
int a[100];
int dfs(int pos, int pre, int sta, int limit)
if(!limit) dp[pos][sta] = ans;
return ans;
}int solve(int x)
// printf("[%d]",dfs(cnt - 1, -1, 0, true));
return dfs(cnt - 1, -1, 0, true);
}int main()
return
0;}
HDU 2089 不要62(數字DP入門)
執著追求並從中得到最大快樂的人,才是成功者。梭羅 第一次做這個題是暴力過的,感覺也沒啥,今天集訓講數字dp,想用數字dp做一下。自己還真是菜的扣腳啊 寫一下題解如果有錯誤希望指正!不勝感激。原題鏈結 f i j i代表有幾位數,j代表起始數字 例如f 3 1 代表的是 100 199 即使是2 63...
hdu 2089 不要62 (數字dp入門)
題目鏈結 杭州人稱那些傻乎乎粘嗒嗒的人為62 音 laoer 杭州交通管理局經常會擴充一些的士車牌照,新近出來乙個好訊息,以後上牌照,不再含有不吉利的數字了,這樣一來,就可以消除個別的士司機和乘客的心理障礙,更安全地服務大眾。不吉利的數字為所有含有4或62的號碼。例如 62315 73418 889...
hdu 2089 不要62 數字dp入門
杭州人稱那些傻乎乎粘嗒嗒的人為62 音 laoer 杭州交通管理局經常會擴充一些的士車牌照,新近出來乙個好訊息,以後上牌照,不再含有不吉利的數字了,這樣一來,就可以消除個別的士司機和乘客的心理障礙,更安全地服務大眾。不吉利的數字為所有含有4或62的號碼。例如 62315 73418 88914 都屬...