POJ2718 遞迴套遞迴

2022-05-01 20:39:07 字數 1103 閱讀 6524

就是給你乙個數,排列組合,然後問如何排列之間的差值最小。

我之前的想法是乙個遞迴,然後兩個for迴圈列舉l1和l2,結果tle了,然後想了一下剪枝發現沒辦法剪,然後看了一下別人的**,用了next_permutation函式,雖然表示在書上看到過,但是具體確實沒有用過,看到別人用了,雖然我也想用一下,但是還是覺得走正道吧,比較遞迴才是正道。不過這道題目,用了這個函式跑的比我的要快,6666

當然我也思考過我第乙個為什麼會t,原因就是我的排列是10個a的無序排列相乘,但是那種種還加了雙重迴圈,所以t了。然後這裡的話就是單純的列舉一種,然後第二種就定了,所以只有排列組合的相乘。

1 #include2 #include3 #include4 #include5

6using

namespace

std;

7const

int inf = 0x3f3f3f3f;8

const

int maxn = 15;9

inta[maxn];

10bool

vis[maxn];

11int

cnt;

12int

mini;

1314

void minidfs(int l2, int tmp, int val2, int

val1)

20for (int i = 1; i <= cnt; i++)27}

2829

void dfs(int l1, int tmp, int

val1)

38for (int i = 1; i <= cnt; i++)45}

4647

intmain()

60int tmp = 1;61

for (int i = 1; i < cnt / 2; i++) tmp *= 10;62

//printf("%d\n", tmp);

63 dfs(cnt / 2, tmp, 0

);64 printf("

%d\n

", mini);65}

66return0;

67 }

view code

POJ 2718 窮竭搜尋

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

poj2718(子集生成)

translation 給出一組數,用這一組數字的兩個不相交的子集組成兩個數。求兩個數差的絕對值的最小值。solution 生成所有可能的子集 可以用庫函式,也可以用bitset寫。這裡直接用next permutation生成所有的可能排列 再從中間切割,用前後兩個數相減的值依次更新ans值即可。...

POJ 2718 搜尋 思維

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