cf 431D 二分 數字DP

2021-06-24 11:46:09 字數 797 閱讀 2803

題意:給定 m, k,求乙個數n,使得 n+1,n+2, .....,n*2 這些數中有m個數的二進位制表示含有k個1

思路:n的範圍為1e18次方,然後又沒有好的公式來求

所以可以試一下二分+數字dp判斷

yy了下,要是mid求得的 個數小於m,則mid應該變大,反之則要變小。。。。

寫了下真的可以,1a

ac**如下:

#include #include #include #include using namespace std;

int digit[100], tot;

__int64 dp[100][100][2];

__int64 m, k;

__int64 dfs( int pos, int presum, bool st )else

}if( !st && dp[pos][presum][st] != -1 )

__int64 ans = 0;

int endd = st ? digit[pos] : 1;

for( int i = 0; i <= endd; i++ )

return dp[pos][presum][st] = ans;

}__int64 solve( __int64 n )

memset( dp, -1, sizeof( dp ) );

return dfs( tot - 1, 0, true );

}int main()else if( t < m )else

}return 0;

}

HDU 3271 SNIBB 數字DP 二分

比較裸的數字dp,需要注意的就是二分時一定要寫成 mid long long l long long r 1 不然會溢位導致超時的,被這個坑了好一會兒。還有就是題目並沒有說y一定大於x,所以需要判斷一下。include include include include include include ...

咕咕東的奇妙序列 二分 數字模擬

poj 1019 number sequence 題目給出一種序列表示方式,可以表示為 1 12 123 1234 12345678910 序列不帶空格 也就是說序列可被分組,第 i 組包含的是1到 i 的所有數字。題目給出多個詢問要求每次得到序列中第 k 位的數字。注意 k 要能取到 10 18....

cf 474E 線段樹 dp 離散化後二分查詢

題意 給你n個柱子,每個柱子都有乙個高度,你從第乙個柱子開始跳往後跳,後面的柱子要滿足 hi hj d才可以跳上去,問最多跳多少步,並且輸出一種跳法,從小到大輸出柱子號。思路 真肯定是個dp,而且思路很簡單 轉移方程 dp i max dp j 1,hi hj d 但是n的範圍是10 5,那麼你每次...