這題長得就比較像數字$dp$叭.
所以先用$dp$進行預處理,再基於拼湊思想,通過"試填法"求出最終的答案.
設$f[i][3]$表示由$i$位數字構成的魔鬼數有多少個,$f[i][j](0<=j<=2)$表示由$i$位數字組成的,開頭有$j$個$6$的非魔鬼數有多少個.注意,在計算$f[i][j]$時允許前導$0$的存在
$f[i][0]=9*(f[i-1][0]+f[i-1][1]+f[i-1][2])$
$f[i][1]=f[i-1][0]$
$f[i][2]=f[i-1][1]$
$f[i][3]=f[i-1][2]+10*f[i-1][3]$
預處理完成之後,我們先通過$f[i][3]$確定第$x$小魔鬼數的位數,然後從左到右進行試填,試填的數從小到大列舉
這題長得就比較像數字$dp$叭.
所以先用$dp$進行預處理,再基於拼湊思想,通過"試填法"求出最終的答案.
設$f[i][3]$表示由$i$位數字構成的魔鬼數有多少個,$f[i][j](0<=j<=2)$表示由$i$位數字組成的,開頭有$j$個$6$的非魔鬼數有多少個.注意,在計算$f[i][j]$時允許前導$0$的存在
$f[i][0]=9*(f[i-1][0]+f[i-1][1]+f[i-1][2])$
$f[i][1]=f[i-1][0]$
$f[i][2]=f[i-1][1]$
$f[i][3]=f[i-1][2]+10*f[i-1][3]$
預處理完成之後,我們先通過$f[i][3]$確定第$x$小魔鬼數的位數,然後從左到右進行試填,試填的數從小到大列舉
code
#include#includeview code#include
#define rg register
#define il inline
#define db double
#define ll long long
#define go(i,a,b) for(rg int i=a;i<=b;i++)
#define yes(i,a,b) for(rg int i=a;i>=b;i--)
using
namespace
std;
il int
read()
while(c>='
0'&&c<='9')
return x*y;
}int
t,n,d,k;
ll f[
21][4
];il
void
init()
}int
main()}}
printf("\n
");}
return0;
}
數字DP POJ 3208 啟示錄
題目大意 我們稱只要某數字的十進位制表示中有三個連續的6,我們就稱它為 魔鬼數 比如 666,1666,6663,16666 等。現給出乙個數x,求 第x小的魔鬼數 x 5 107 x le 5 times 10 7 x 5 10 7,一共有t組資料點,t 1000 t le1000 t 1000 ...
遊戲啟示錄
暑假期間因為比較清閒,玩了很多遊戲。有些是近幾年的新遊戲,有些是古老的遊戲。自己在玩遊戲的過程中也總結出一些遊戲設計上的心得。下面一一介紹 1.魔法師傳奇。這個遊戲最近幾年出了第2部。可惜不知道是什麼原因,畫面是跳動的,而且進入遊戲後動滑鼠就宕機。無奈只得將其刪除。它是由曾經開發過 幽浮 的英國著名...
「摩根」啟示錄
摩根 啟示錄 1 摩根 公司創立 摩根 公司創立於2006年4月1日的一次 戰略管理與決策 沙盤模擬訓練。非常感謝公司給我們這樣一次全面體驗企業經營的機會。1.1沙盤模擬 沙盤模擬訓練源自西方軍事上的戰爭沙盤模擬推演,完全不同於傳統的灌輸授課方式,它通過模擬企業執行,使受訓者在主導 企業 各項經營管...