不會數字dp的同學點這裡 數字dp教學
#include
using
namespace std;
#define ll long long
#define lb long double
#define inf 0x3f3f3f3f
const
int maxn =
100035
;const
int mod =
1e6+7;
int len;
ll dp[15]
[2][
2][12
][10]
;// dp[i][j][k][l][m]表示當前搜到第i位,且前導0與最高位限制狀態為j和k, 且要統計的數字是l, 並且已經產生m個dig的答案
int a[15]
;// pos代表當前搜到第幾位,lead表示有無前導0, limit表示當前位是有限制, dig表示要統計是的數字, sum表示已經產生的dig的數量
ll dfs
(int pos,
int lead,
int limit,
int dig,
int sum)
//只有無限制無前導0的情況才更新dp陣列;
return
(!limit &&
!lead)
? dp[pos]
[lead]
[limit]
[dig]
[sum]
= res : res;
}ll cal
(ll x,
int y)
memset
(dp,-1
,sizeof
(dp));
return
dfs(1,
1,1, y,0)
;// 從高位向低位搜
}int
main()
return0;
}
[hdu2089]不要62
#include
using
namespace std;
#define ll long long
#define endl '\n'
const
int maxn =
100035
;const
int mod =
1e6+7;
ll l, r;
int len;
int a[16]
;ll dp[20]
[2][
2][10
];ll dfs
(int pos,
int lead,
int limit,
int last)
return
(!limit &&
!lead)
? dp[pos]
[lead]
[limit]
[last]
= res : res;
}ll cal
(ll x)
memset
(dp,-1
,sizeof
(dp));
return
dfs(1,
1,1,
0);}
intmain()
return0;
}
p2657 [scoi2009]windy數
#include
using
namespace std;
#define ll long long
#define endl '\n'
const
int maxn =
100035
;const
int mod =
1e6+7;
ll l, r;
int len;
int a[16]
;ll dp[20]
[2][
2][10
];ll dfs
(int pos,
int lead,
int limit,
int last)
return
(!limit &&
!lead)
? dp[pos]
[lead]
[limit]
[last]
= res : res;
}ll cal
(ll x)
memset
(dp,-1
,sizeof
(dp));
return
dfs(1,
1,1,
-10);
}int
main()
數字DP入門 數字DP模板
數字dp是一種計數用的dp,一般就是要統計乙個區間 le,ri 內滿足一些條件數的個數。所謂數字dp,字面意思就是在數字上進行dp咯。數字還算是比較好聽的名字,數字的含義 乙個數有個位 十位 百位 千位.數的每一位就是數字啦!之所以要引入數字的概念完全就是為了dp。數字dp的實質就是換一種暴力列舉的...
數字dp模版(dp)
1 include 2 include 3 include 4 include 5 6using namespace std 78 intt 9long long dp 19 19 2005 10 long long l,r 11int shu 20 12 13long long dfs int l...
數字DP 數字遊戲
科協裡最近很流行數字遊戲。某人命名了一種不降數,這種數字必須滿足從左到右個位數字呈現小於等於的關係,如123,446.現在大家決定玩乙個遊戲,指定乙個整數閉區間 a,b 問這個區間內有多少個不降數。輸入多組測試資料。每組只包含兩個數字a和b 1 a,b 2 31 每行給出乙個測試資料的答案,即 a,...