給一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...