国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

Zoj 2868 Incredible Cows (dfs暴搜)

2019-11-08 02:53:06
字體:
來源:轉載
供稿:網友

對于一個超出范圍暴搜問題,嘗試分一半暴搜求解

/*Zoj 2868 Incredible Cows時間: 2017/02/18題意:將一堆數分成兩堆,使兩堆和差最小題解:直接暴力2^34,分成兩堆優化,將一堆暴力預處理所有可能的和,將和排序后,在另一堆暴力出和后,尋找于第一堆相加最接近sum/2的值,枚舉找出最小答案。*/#include <iostream>#include <cstdio>#include <cstring>#include <cmath>#include <algorithm>#include <queue>#include <map>using namespace std;#define LL long long#define INF 0x3f3f3f3f#define PI acos(-1.0)#define E 2.71828#define MOD 1000000007#define N 110#define M 5010int a[N],vis[1<<18];int n,m,ans,half,sum;int k;void dfs1(int depth,int val){    if(depth == m)    {        vis[k++] = val;        return ;    }    dfs1(depth+1,val);    dfs1(depth+1,val+a[depth]);}void dfs2(int depth,int val){    if(depth == n)    {        int id = lower_bound(vis,vis+k,half-val)-vis;        if(id < k)            ans = min(ans,abs(sum-2*(vis[id]+val)));        return ;    }    dfs2(depth+1,val);    dfs2(depth+1,val+a[depth]);}int main(){    int T;    scanf("%d",&T);    while(T--)    {        scanf("%d",&n);        sum = 0;        for(int i = 0; i < n; i++)        {            scanf("%d",&a[i]);            sum += a[i];        }        half = sum/2;        m = n/2;        k = 0;        ans = sum;        dfs1(0,0);        sort(vis,vis+k);        dfs2(m,0);        PRintf("%d/n",ans);    }    return 0;}


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 永福县| 当雄县| 建湖县| 长武县| 仁寿县| 桐梓县| 绥宁县| 名山县| 鱼台县| 大新县| 仁寿县| 新郑市| 辽宁省| 蓬溪县| 长沙市| 云和县| 鄂温| 阳西县| 东丽区| 依安县| 平南县| 铜山县| 宿迁市| 桐乡市| 滦平县| 盖州市| 岱山县| 大厂| 阳新县| 夏邑县| 莱州市| 济宁市| 奇台县| 桐梓县| 广南县| 左权县| 东方市| 江油市| 兴文县| 宁波市| 漠河县|