标签:com 分析 说明 情况 个数 https print href space
这题让我知道了,大佬写证明,蒟蒻找规律。
借鉴于此
首先是一个知识,\(a+b \ge a\) \(xor\) \(b\)
在\(u\le v\)的时候,如果\(v\)不超出范围,那么\(u\)一定不会超出,设\(dp_{i,j}\)表示考虑了当前\(a,b\)的第\(i\)位,且\(v=a+b=j\)的方案数。
然后对于\(i\)和\(i-1\)的转移,令\(j_1\)表示\(i-1\)时的\(j\),这时\(a,b\)的第\(i\)位只会有三种情况。
#include<cstdio>
#include<map>
#define ll long long
using namespace std;
const int Mod=1e9+7;
map<ll,ll> dp;
ll dfs(ll x){
if(dp[x])return dp[x];
return dp[x]=(dfs(x>>1)+dfs(x-1>>1)+dfs(x-2>>1))%Mod;
}
int main(){
ll n;
scanf("%lld",&n);
dp[0]=1;
dp[1]=2;
ll res=dfs(n)%Mod;
printf("%lld\n",res);
}
标签:com 分析 说明 情况 个数 https print href space
原文地址:https://www.cnblogs.com/anyixing-fly/p/12864490.html