我是超連結
題意:找0~n中含有「49」的個數
題解:狀態:f[i][j]表示i位數以j開頭的數中不含49的個數
轉移:if (j!=4 || k!=9) f[i][j]+=f[i-1][k]; (不含49,最後用總數減去不含的就是含有的)
因為資料n+1怕爆longlong,手動+1
**:
#include #include #define ll long long
using namespace std;
//i位數以j開頭的數中不含49的個數
ll f[50][50];
int t,digi[50];ll n,ans;
void dp()
ll find(ll n)
digi[1]++;
for (i=1;i<=cnt;i++)
if (digi[i]>=10) digi[i+1]+=digi[i]/10,digi[i]%=10;
if (digi[cnt+1]) cnt++;
for (i=cnt;i>=1;i--)
ll find(int n)
for (i=cnt;i>=1;i--)
ll find(ll n)
for (i=cnt;i>=1;i--)
int a,amod,bmod;
for (int i=2;i<=10;++i)
for (int j=0;j<13;++j)
if (k==3) f[i][j][2]+=f[i-1][bmod][1]+f[i-1][bmod][2];} }
}int find(int n)
//如果這一位》1的話,要加上不含13但是開頭為3的
if (digit[i]>1)
if (digit[i]==3&&digit[i+1]==1) flag=true;
//最後加上這一位的數
last+=mi[i-1]*digit[i];
}return ans;
}int main()
區間dp小練
提綱 區間dp一般設計f i j 表示區間i到j的dp值,用幾段小的合併成一段整體,也是分治的思想,轉移時列舉中間點k,從f i k f k 1 j 來合併 1.題目 題解 石子歸併 水題開頭 include include include using namespace std int n,a 1...
dp 雜練 專練 round2
上次題似乎有點水 大概到noi之前會進行一些針對自己薄弱點的專項訓練吧 bz oj1419re disg ood 額.dp i j 表示re d剩i張 bla ck剩j 張的期望 每次期望 概率 轉移就行 注意如果期望在 0以下就 不取了 空間不夠 所以滾 一下 code by liuchenrui...
數字DP入門 數字DP模板
數字dp是一種計數用的dp,一般就是要統計乙個區間 le,ri 內滿足一些條件數的個數。所謂數字dp,字面意思就是在數字上進行dp咯。數字還算是比較好聽的名字,數字的含義 乙個數有個位 十位 百位 千位.數的每一位就是數字啦!之所以要引入數字的概念完全就是為了dp。數字dp的實質就是換一種暴力列舉的...