原題:牛客網
動態規劃dynamic programming 的入門級題目
題目描述 :
給你乙個長度為50的數字串,問你有多少個子序列構成的數字可以被3整除
答案對1e9+7取模
輸入描述:
輸入乙個字串,由數字構成,長度小於等於50
輸出描述:
輸出乙個整數
示例
輸入:
132輸出:
3正確**
#include using namespace std;
const int mod=1e9+7;
int dp[3];
char a1[55];
int main()
{ cin.getline(a1,55);
memset(dp,0, sizeof(dp));
int n=strlen(a1);
for(int i=0;i題目認知:
子串行與子串的區別在於連續與否,子串連續,子串行不連續,因此根據題意我們要對所有子串行進行判斷是否滿足題意和滿足題意的子串行的個數有多少個,最後對結果取餘數,取餘數時,無論是最後一起取餘,還是分步取餘結果都是一樣的,因此,分步取餘更易於儲存。
對於如何對子序列進行判斷
就上文中的正確**裡,我使用了乙個for迴圈對整個陣列進行一次遍歷,一次遍歷即可求出所要結果。
就dp思想而言,我們應該將大問題化為小問題,逐個對小問題進行求解,因此應該考慮如何分離子序列,然後再對子序列進行判斷。
C 初學記錄(動態規劃 被3整除的子串行)
原題 牛客網 動態規劃dynamic programming 的入門級題目 題目描述 給你乙個長度為50的數字串,問你有多少個子序列構成的數字可以被3整除 答案對1e9 7取模 輸入描述 輸入乙個字串,由數字構成,長度小於等於50 輸出描述 輸出乙個整數 示例 輸入 132輸出 3正確 includ...
4 1 被3整除的子串行
給你乙個長度為50的數字串,問你有多少個子序列構成的數字可以被3整除 答案對1e9 7取模 輸入乙個字串,由數字構成,長度小於等於50 輸出乙個整數 132931 因為被3取餘只可能是 0 1 2 所以每次提取乙個數字把它現有的可能和之前的可能性相結合就可以得到每次的被3整除的總數。dp i j d...
dp被3整除的子串行
給你乙個長度為50的數字串,問你有多少個子序列構成的數字可以被3整除 答案對1e9 7取模 輸入乙個字串,由數字構成,長度小於等於50輸出乙個整數示例1 複製132 複製3 示例2複製9 複製1 示例3複製333 複製7 示例4複製123456 複製23 示例5複製00 複製3 n為長度 子任務1 ...