poj2718(子集生成)

2021-07-23 23:06:59 字數 846 閱讀 9039

/*

translation:

給出一組數,用這一組數字的兩個不相交的子集組成兩個數。求兩個數差的絕對值的最小值。

solution:

生成所有可能的子集

可以用庫函式,也可以用bitset寫。這裡直接用next_permutation生成所有的可能排列

再從中間切割,用前後兩個數相減的值依次更新ans值即可。

note:

1:本來想用dfs生成所有的可能解,但還是庫函式好用。

date:

2016.10.21

*/#include #include #include #include #include using namespace std;

const int maxn = 10 + 5;

const int inf = 1e8;

int digit[maxn], num1[maxn], num2[maxn];

int ans, used[maxn], p;

int solve()

} while(next_permutation(digit, digit+p));

return ans;

}int main()

ans = inf; //printf("#%d\n", p);

if(p == 1) printf("%d\n", digit[0]);

else if(p == 2) printf("%d\n", abs(digit[0] - digit[1]));

else printf("%d\n", solve());

} return 0;

}

POJ 2718 窮竭搜尋

給一串大於0且小於9的數字,將其分成兩串數字且差值最小。長度大於0的數字不能以0開始。兩個子串長度相同或相差1時它們的差值最小。使用next permutation生成全排列後,用前一半的數字減後一半的數字取絕對值。include include include include define max...

POJ 2718 搜尋 思維

一道思維細節題,沒有什麼難點。這種題想到就行,沒想到錯誤找一輩子.o poj 2718 題意 給出最多10個不重複的從小到大的個位數,將它們任意組合為兩個數字,不能有前導0。求出,所有排列中,兩個數的最小差值。網上很多人都是用new permution還是什麼的stl裡的取排列辦法直接爆搜。沒有嘗試...

POJ2718 遞迴套遞迴

就是給你乙個數,排列組合,然後問如何排列之間的差值最小。我之前的想法是乙個遞迴,然後兩個for迴圈列舉l1和l2,結果tle了,然後想了一下剪枝發現沒辦法剪,然後看了一下別人的 用了next permutation函式,雖然表示在書上看到過,但是具體確實沒有用過,看到別人用了,雖然我也想用一下,但是...