(
題意:在0 ~ 2^n-1中,選出盡量少的二進位制位有m個1的數,要求包含全部二進位制位含有r個1的數。n<=8。
解法:就是乙個重複覆蓋,但是不管怎麼剪枝都會超時,所以要打表交上去。
這是打表的程式
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
//#include
//#include
#include
//#pragma comment(linker, "/stack:1024000000,1024000000")
#define lson l, m, rt<<1
#define rson m+1, r, rt<<1|1
#define inf (1e9+7)
#define debug(a) cout << #a" = " << (a) << endl;
#define debugarry(a, n) for (int i = 0; i < (n); i++)
#define clr(x, y) memset(x, y, sizeof x)
#define ll long long
#define ll long long
#define ull unsigned ll
using
namespace
std;
const
int maxn = 1e5;
struct sad
l[0] = m;
r[m] = 0;
clr(h,-1);
si = m;
ans = inf;
}void link(int row,int col)else
h[row] = l[si] = r[si] = si;
}void remove(int c)
}void resume(int c)
}int vis[maxn];
int h()
return ret;
}void dfs(int cnt)
int c=r[0];
for(int i=r[0];i;i=r[i])
if(s[c]>s[i]) c=i;
for(int i=d[c];i-c;i=d[i])
}}dlx;
int rlog[maxn];
void init()
vector
int,int> >q;
int main()
int cnt=0;
q.clear();
for(int i=0;i<(1
dlx.init(cnt);
for(int i=0;i0);
printf("case #%d: %d\n",++case,dlx.ans);
}return
0;}
HDU 3529 舞蹈鏈之可重複覆蓋
點選開啟鏈結 題意 在點的地方放炸彈,炸彈可以炸到的地方無限遠並且是十字的形式,但是如果炸到 或者 則這個方向停下來,問最少需要多少炸彈同時引爆才可以將所有 炸掉 思路 一道模版舞蹈鏈了,對於建圖我們將所有的 看做列,然後所有的點也就是放炸彈的地方看做行,然後找一下每個點可以炸的 就可以了,建圖後跑...
hdu 4548 素數打表
方法 篩法打表,再將是素數的中判斷是不是美素數。比較裸。但是就是一開始這樣做會超時。重新用乙個陣列來儲存到當前數字時已經出現了幾個美素數,最後將區間兩端所對應的相互減一下就可以了。include include include using namespace std define m 1000001...
hdu 1443 Joseph 暴力打表
題目大意 k個好人,k個壞人,確定n,利用joseph方法刪除所有壞人.由於資料規模,可以利用暴力打表,以後能打表就盡量打表。這題原本模擬資料時間完全夠的,但是測試資料有很多重複的,導致很多人超時,暗坑!以後要注意點這種情況。打表 includeint main while scanf d n n ...