/**********************jibancanyang**************************
*author :jibancanyang
*created time : 五 4/15 23:43:25 2016
*file name : hdu3555 .cpp
*problem:典型數字dp
*get:上次切這個題用的是水過去的方法,這次用模板化的dfs寫了下,其方法本質就是一位一位的增加數字.
*並且設定了乙個limit的狀態記錄,來記錄前面的數是否是邊界,如果是邊界那麼當前位只能最大是bit[i],而不能
*0 ~ 9的隨便取了.然後注意的是這裡是統計的到0的情況.
***********************1599664856@qq.com**********************/
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
using
namespace
std;
typedef pair pii;
typedef
long
long ll;
typedef
unsigned
long
long ull;
vector
vi;
#define pr(x) cout << #x << ": " << x << " "
#define pl(x) cout << #x << ": " << x << endl;
#define xx first
#define yy second
#define sa(n) scanf("%d", &(n))
#define rep(i, a, n) for (int i = a; i < n; i++)
#define vep(c) for(decltype((c).begin() ) it = (c).begin(); it != (c).end(); it++)
const
int mod = int(1e9) + 7, inf = 0x3fffffff, maxn = 1e5 + 12;
int t;
ll n, dp[25][2];
int bits[25];
#define limit asdf
ll dfs(int len, bool four, bool limit)
//pr(len), pr(four), pr(limit), pl(ret);
if (!limit) dp[len][four] = ret;
return ret;
}ll solve(ll n)
return dfs(t - 1, false, true);
}int main(void)
return
0;}
hdu 3555 數字dp入門
題意 給定乙個long long型別能夠存下的數字n,統計1 n之間含有49的數字的個數 思路 初始版本 需要記錄當前位置,前一位置放了那個數字,當前是否已經包含49,是否有上界這四個資訊,也就是dfs的四個引數。dfs pos,pre,istrue,limit 其實這種做法有點相當於把普通的數字d...
hdu3555 數字dp 入門
題目大意 給乙個數字n,範圍在1 2 63 1,求1 n之間含有49的數字有多少個。思路 狀態轉移 dp i 0 代表長度為 i 並且不含有49的數字的個數 dp i 1 代表長度為 i 並且不含有49,但是最高位是9的數字的個數 dp i 2 代表長度為 i 並且含有49的數字的個數。陣列 a i...
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 存數的位數...