題意:
給你n個點的圖,然後讓你在圖里挑m個點,達到sumedge/sumnode最小
思路:由於資料範圍小,狀壓列舉符合m個點的狀態,我是用vactor存了結點位置,也記錄了結點的sum值,然後跑一發最小生成樹就可以知道sumedge,這裡判斷可以利用乘法,然後更新乙個狀態就好了;
#include using namespace std;
typedef long long ll;
int ma[20][20];
int val[20];
int sumnode,sumedge;
int n,m;
int cnt;
int a,b;
int dis[20];
vectorpb;
bool vis[20];
int prim()
}for(int i=0;isumedge*b)}}
int flag=0;
for(int i=0;i
HDU2489 狀壓列舉
題意 給你n個點的圖,然後讓你在圖里挑m個點,達到sumedge sumnode最小 思路 由於資料範圍小,狀壓列舉符合m個點的狀態,我是用vactor存了結點位置,也記錄了結點的sum值,然後跑一發最小生成樹就可以知道sumedge,這裡判斷可以利用乘法,然後更新乙個狀態就好了 include u...
hdu 4770 狀壓 列舉
長記性了,以後對大陣列初始化要注意了!140ms 原來是對vis陣列進行每次初始化,每次初始化要200 200的複雜度 一直超時,發現沒必要這樣,直接標記點就行了,只需要乙個15的陣列用來標記,vis陣列用來對映座標就行了 然後就是暴力加了一點優化,下面沒有加優化。include include d...
UVA 11825 狀壓 子集列舉
題意 給你若干個集合,讓你把這些集合做劃分使的每個劃分的並集是乙個全集,問你最多能進行多少個劃分。思路 首先了解下子集列舉的方法 for int i s i i i 1 i 1使得末尾最右邊的1右邊的0變成1,自己變成0,然後經過與運算把不存在的1刪掉,原來是0的位無論如何也不會變成1,但是原來是1...