落谷3773 數論 dp遞推

2021-08-27 05:17:11 字數 780 閱讀 6948

這個題就用到了上篇部落格遍歷子集的小技巧,

題意是找有多少個長度》=2的下降子串行,滿足mod2的lucas,並且值大於0

由lucas可以知道c(x,y)=c(a1,b1)*c(a2,b2)……由於ai,bi非零即1,所以 只要出現c(0,1)結果就會是0,

所以在轉移的時候,只要找到這個數二進位制中一的子集代表的數,轉移就好。

#includeusing namespace std;

const int n=3e5+10;

int n, a[n];

int dp[n];

bool vis[n];

int p=1e9+7;

int main()

vis[t]=true;

}int ans=0;

for(int i=1; i<=n; i++)

ans=(ans+dp[a[i]])%p;

printf("%d\n", ans);

return 0;

}

第二種方法是看那個數的子集包含自己,正著推

#include#define ll long long

using namespace std;

const int mod = 1000000007;

ll f[233334], n, ans = 0;

int main()

printf("%lld\n", ans);

return 0;

}

遞推DP 加深

zoj 3747 題意 給n個士兵排隊,每個士兵三種g r p可選,求至少有m個連續g士兵,最多有k個連續r士兵的排列的種數。都轉化為至多的士兵連續的個數。令集合a 集合b c a b 在轉化要如何求 至多x個g士兵連續,至多y個士兵連續 dp i 0 至多i個g 的方案數 dp i 1 至多i個r...

數字轉換(dp 數論)

題意 如果乙個數 x 的約數之和 y 不包括他本身 比他本身小,那麼 x 可以變成 y,y 也可以變成 x。例如,4 可以變為 3,1 可以變為 7。限定所有數字變換在不超過 n 的正整數範圍內進行,求不斷進行數字變換且不出現重複數字的最多變換步數。思路 可以將每個數與能到達的數之間連一條邊,這樣就...

每日演算法 計數DP和遞推DP

計數pd就是emm感覺求那種什麼路徑和的就是計數那一類的,再概括一下就是可以不用其他操作直接將它相鄰或者說符合要求的 求和,就是下乙個位置的值。回到這題 用動規很好做。我們想要知道 0,0 到終點的位置的路徑,只需要知道終點已左終點已下的路徑為多少就行了。dp i j 0,0 到 i,j 位置的路徑...