求出一段區間內與\(7\)無關的數的平方和,我們定義這個數與\(7\)有關當且僅當這個數滿足下列條件之一:1、某一位為\(7\);2、數字和為\(7\)的倍數;3、這個數本身是\(7\)的倍數。
這題並不算裸的數字\(dp\)題,顯然如果對於計數我們很容易得到這個區間內滿足條件的個數,而為了使數字\(dp\)的\(dp\)能夠有子狀態重疊,我們仍然考慮計數,不過對於每一位的處理可以轉化為記錄它的狀態,我們用乙個三元組\((cnt,sum,sqsum)\)描述這個狀態,它代表這這個狀態下符合條件的數的個數\(cnt\),這後幾位數的和對答案的貢獻,後幾位的平方和對答案的貢獻。顯然\(cnt\)可以直接求出來。
而對於另兩個值,我們考慮當前位為\(pos\),選取的值為\(i\),\(tmp\)為傳回來的答案,那麼顯然\(ans.sum=(ans.sum+tmp.cnt*10^*i)\),因為每乙個符合條件的數這一位都為\(i\),對和有\(i*10^\)的貢獻。而對於平方和,我們要求的實際就是\(\sum(i*10^+x)^2\)(\(x\)符合條件),所以我們暴力把它拆開,得到\(\sum (i^2*10^+2*i*10^*x+x^2)\),再把求和拆開得\(\sum i^2*10^+\sum 2*i*10^*x+\sum x^2\),這個我們可以用得到的三元組\((cnt,sum,sqsum)\)直接轉移。
#includeusing namespace std;
typedef long long ll;
const ll mod=1e9+7;
struct node
};node dp[31][11][11];
ll p[30];
ll power[30];
ll sqr(ll x)
node dfs(ll pos,ll s1,ll s2,ll flag)
while(ch>='0'&&ch<='9')
return res*w;
}void write(ll x)
if(x>9)write(x/10);
putchar(x%10+'0');
}void writeln(ll x)
int main()
}
數字dp(恨7不成妻)
hdu 4507 吉哥系列故事 恨7不成妻 數字dp 思路 想必普通的統計滿足條件的個數都會吧,這裡就不在贅述了,dp i j k 代表長度為i,數字對7取餘數為j,數字各個位數加起來對7取餘數k 僅僅用dp i j k 的值代表個數是不能得到答案的,還要統計滿足條件的和還有平方和 開結構體,維護和...
數字dp 恨7不成妻
題目描述 單身!依然單身!吉哥依然單身!ds 級碼農吉哥依然單身!所以,他平生最恨情人節,不管是 214 還是 77 他都討厭!吉哥觀察了 214 和 77 這兩個數,發現 2 1 4 7 7 7 7 2 77 7 11 最終,他發現原來這一切歸根到底都是因為和 7 有關!所以,他現在甚至討厭一切和...
HDOJ4507 恨7不成妻
這個題,跟標準模板就有很多的不一樣了,主要體現在數學的計算上面 題意 區間 l,r 內,與7數字無關的數的平方和 無關的定義是 該數不含7,不能被7整除,各個數字之和不是7的倍數 分析 如果是統計符合某種性質的數的個數,那麼很簡單 不含7,在數字列舉的時候遇到7跳過就好 被7整除和數字之和是7的倍數...