HDU 4507 吉哥系列故事 恨7不成妻

2022-02-28 14:58:46 字數 1301 閱讀 6307

題目鏈結

如果乙個整數符合下面\(3\)個條件之一,那麼我們就說這個整數和7有關——

1、整數中某一位是\(7\);

2、整數的每一位加起來的和是\(7\)的整數倍;

3、這個整數是\(7\)的整數倍;

現在問題來了:吉哥想知道在一定區間內和7無關的數字的平方和。

\(l,r\leq 10^\)

具體請見題目

典型的數字dp題目。

考慮\(f[p,s,v]\)表示數字\(p\),各位和對\(7\)取模是\(s\),數對\(7\)取模是\(v\)的方案數。

那麼在搜尋的過程中只要避開\(7\)的分支,並在搜到葉節點的時候判斷是否滿足條件\(2,3\)即可。

如果是和顯然很好求。平方和需要用到額外的東西。

完全平方公式

大概是初二的時候教了這東西吧。完全沒想到它。\((a+b)^2=a^2+b^2+2ab\)

那麼利用這個公式。我們就可以在中途維護這個平方和了。

對\(f\)陣列維護三個量:\(cnt\)表示合法的數的個數,\(sum\)表示合法的數的和,\(sumq\)表示合法的數的平方和。

那麼在回溯過程中對\(cnt\)和\(sum\)累加,對\(sumq\)利用完全平方公式處理即可。

**如下:

#include using namespace std;

#define ll long long

const ll mod = 1e9 + 7;

ll num[23], cnt, po[23];

ll l, r;

struct task

//cnt 個數 sumq 平方和 sum和

//(a+b)^2=a^2+b^2+2ab

}f[23][23][23];

void init()

} }}task dfs(int pos, bool done, ll sum, ll v)

if(!done && f[pos][sum][v].cnt != -1) return f[pos][sum][v];

ll ed = done ? num[pos] : 9; task res;

res.cnt = 0;

for(ll i = 0; i <= ed; ++i)

if(done) return res;

return f[pos][sum][v] = res;

}ll count(ll x)

int main()

return 0;

}

HDU 4507 吉哥系列故事 恨7不成妻

數字dp專題 題意 統計在 l,r 區間內所有與7無關數字的平方和。什麼樣的數和7有關呢?如果乙個整數符合下面3個條件之一,那麼我們就說這個整數和7有關 1 整數中某一位是7 2 整數的每一位加起來的和是7的整數倍 3 這個整數是7的整數倍 思路 如果是統計區間內數的個數就比較簡單,那麼我們來考慮一...

HDU4507 吉哥系列故事 恨7不成妻

單身 依然單身!吉哥依然單身!ds級碼農吉哥依然單身!所以,他生平最恨情人節,不管是214還是77,他都討厭!吉哥觀察了214和77這兩個數,發現 2 1 4 7 7 7 7 2 77 7 11 最終,他發現原來這一切歸根到底都是因為和7有關!所以,他現在甚至討厭一切和7有關的數!什麼樣的數和7有關...

吉哥系列故事 恨7不成妻 HDU 4507

hdu 4507 單身 依然單身!吉哥依然單身!ds級碼農吉哥依然單身!所以,他生平最恨情人節,不管是214還是77,他都討厭!吉哥觀察了214和77這兩個數,發現 2 1 4 7 7 7 7 2 77 7 11 最終,他發現原來這一切歸根到底都是因為和7有關!所以,他現在甚至討厭一切和7有關的數!...