hdu 5119 和》 m情況數 dp

2021-06-27 11:03:43 字數 894 閱讀 1315

給一n元數列,求異或和》=m的情況數

dp[i][j]表示由前i個數組成異或和為j的方法數,

每次先獲得不異或當前b[i]的情況數,加上異或了b[i]的情況數即可。

dp[0][0]=1,其他為0;

5s險過..

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

#define rd(x) scanf("%d",&x)

#define rd2(x,y) scanf("%d%d",&x,&y)

#define rd3(x,y,z) scanf("%d%d%d",&x,&y,&z)

#define clr0(x) memset(x,0,sizeof(x))

#define clr1(x) memset(x,-1,sizeof(x))

#define eps 1e-9

const double pi = acos(-1.0);

typedef long long ll;

const int inf = 1000000000;

const int maxn = 2e6+5;

int dp[45][maxn],n,m,b[45];

ll work()

ll ans = 0;

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

for(int j = m;j < maxn;++j)

ans += dp[i][j];

return ans;

}int main()

return 0;}/*

*/

hdu 5119 (滾動陣列)

題意 給定n nn個數k ik i ki 從中選取任意個 可以為0 00 進行異或得到ans ansan s,問有多少種ans m ans geq m ans m。資料範圍 1 n 40,0 ki 106,m 10 61 leq n leq 40,0 leq k i leq 10 6,m leq 1...

hdu 5119 滾動陣列dp

題意 現在乙個人有n個朋友,它的每個朋友都有乙個值,它每次可以選擇一些朋友的值然後將它們異或起來,如果最後的異或和大於等於m的話,那麼這個人就贏了。問,這個人有幾種贏的方法。思路 求有幾種方法的題目都可以用dp來思考。dp i j 前i個人異或和為j有幾種方法。由於直接開40個人會mle,所以只能用...

HDU 1024最大m段字段和

題意 給你n個數,選m個子段,各個子段連續且不相交,長度可以為1,設maxn為各個子區間的和,求最大的maxn。分析 設dp i j 代表 j個數選取 i 個子段 maxn最大的值 得狀態轉移方程dp i j ma x dp i j 1 dp i j 1 a j dp i 1 k a j 0 kdp...