數字dp基礎題目

2022-04-08 19:40:01 字數 2947 閱讀 8384

[cpp]

/********************

language:c++  

author:pirates

problem:hdu2089 

style:數字dp 

*********************/   

#include  

#include  

#include  

using namespace std; 

#define maxx 1000010  

int dp[10][10]; 

//dp[i][0] 代表不是不吉利的個數  

//dp[i][1] 代表最高位為2的個數且是非不吉利數   

//dp[i][2] 代表不吉利個數的總數,62或4都不能存在   

void init()  } 

int solve(int n) 

bit[len+1]=0; 

int ans=0; 

for(int i=len;i>=0;i--) 

} return tem-ans; 

}  int main() 

return 0; 

} /********************

language:c++ 

author:pirates

problem:hdu2089

style:數字dp

*********************/

#include

#include

#include

using namespace std;

#define maxx 1000010

int dp[10][10];

//dp[i][0] 代表不是不吉利的個數

//dp[i][1] 代表最高位為2的個數且是非不吉利數

//dp[i][2] 代表不吉利個數的總數,62或4都不能存在

void init()

}int solve(int n)

bit[len+1]=0;

int ans=0;

for(int i=len;i>=0;i--)

}return tem-ans;

}int main()

return 0;

}[cpp]

/********************

language:c++  

author:pirates

problem:hdu3555

style:數字dp 

*********************/   

#include  

#include  

#include  

#include  

using namespace std; 

//dp[i][0] 代表不出現49的個數  

//dp[i][1] 最高位為9的個數  

//dp[i][2] 出現49的 個數   

typedef __int64 ll; 

ll dp[30][3]; 

void init() 

}  ll solve(ll n) 

bit[len+1]=0; 

ll ans=0; 

ll flag=0; 

for(i=len;i>0;i--) 

} return ans; }  

int main() 

return 0; 

} /********************

language:c++ 

author:pirates

problem:hdu3555

style:數字dp

*********************/

#include

#include

#include

#include

using namespace std;

//dp[i][0] 代表不出現49的個數

//dp[i][1] 最高位為9的個數

//dp[i][2] 出現49的 個數

typedef __int64 ll;

ll dp[30][3];

void init()

}ll solve(ll n)

bit[len+1]=0;

ll ans=0;

ll flag=0;

for(i=len;i>0;i--)

}return ans;

}int main()

return 0;

}[cpp

/***************

language:c++  

author:pirates

problem:相鄰兩數差2 

style:數字dp

****************/  

#include  

#include  

#include  

#include  

using namespace std; 

int dp[15][10]; 

void init() 

int solve(int n) 

bit[len+1]=0; 

int ans=0; 

for(i=1;i

for(j=1;j

ans+=dp[i][j]; 

for(i=1;i

ans+=dp[len][i];     

for(i=len-1;i;i--)      //  

for(j=0;j

if(abs(j-bit[i+1])>=2) 

ans+=dp[i][j]; 

if(abs(bit[i+1]-bit[i])<2) break; 

} return ans; 

} int main() 

數字DP入門詳解 題目推薦

update 2019 9 6 部落格裡某些東西沒有解釋清楚,完善了對應的解釋 在開始之前,我們先來看一道題 題目鏈結 題目要求,相鄰兩位的差大於等於2,那麼我們先來構造乙個試一試。比如說 15246 這個數,我們先取第一位為 1 然後第二位是 5 5 1 4 2 所以符合條件,第三位是 2 5 2...

簡單基礎數字 dp 題

終於比較理解了數字 dp qwq 處理大數區間的計數,分成每一位考慮,f 考慮從高到低位在第 pos 位並且滿足某些條件的答案,這個東西我們可以記憶化搜尋,但是注意要設計好狀態,不然會漏或者重複計算某些情況 qwq 需要觀察題目有沒有前導 0 限制,不過這個也不是重點了。關鍵在於對狀態的設計。zjo...

DP題目講解

1,題目詳見 解析 要是個等差數列,所以要排序,讓後以i為第一項,j為第二項的最長等差數列 那麼第三項則為f i j f j k 1 可是這樣是三重迴圈,但是這滿足這樣乙個等式 a k a j a j i 所以我麼只要列舉j,讓後i,k分別向左右列舉時間複雜度就為o n n 了 但是這樣還會卡時間,...