HDU 1427 24點 是否可算

2021-06-29 14:12:13 字數 1401 閱讀 3124

宿舍先玩鬥地主再玩24點~

費腦子不想算了,回hdu寫個題吧

可以考慮簡單暴力全排列,

符號位三個 4*4*4;

數字四個 4*3*2*1;

但寫起來**太多。

dfs進去,一共四個數,算三次運算,每次運算可以向前結合,可以向後結合。

特別注意int型時的整除

不要求顯示組合情況只要yes or no。

//

// main.cpp

// hdu

//// created by baodong on 15/4/4.

//#include

#include

#include

#include

#include

using

namespace

std;

int parsenum(char input)else

if (input[0] == 'k')

if (input[0] == 'q')

if (input[0]== 'j')

return input[0]-'0';

}}int cmp(const

void *a,const

void *b)

int mark = 0;

int numarr[4]; //存四個數

void dfs(int sum,int cur,int m)

//向前結合

dfs(sum+cur,numarr[m+1],m+1);

dfs(sum-cur,numarr[m+1],m+1);

dfs(sum*cur,numarr[m+1],m+1);

if(cur!=0&&sum%cur==0)

dfs(sum/cur,numarr[m+1],m+1);

//向後結合

dfs(sum,cur+numarr[m+1],m+1);

dfs(sum,cur-numarr[m+1],m+1);

dfs(sum,cur*numarr[m+1],m+1);

if(numarr[m+1]!=0&&cur%numarr[m+1]==0)

dfs(sum,cur/numarr[m+1],m+1);

}int main(int argc, const

char * argv)

qsort(numarr,4, sizeof(numarr[0]), cmp );

dowhile (!mark && next_permutation(numarr,numarr+4));

if(mark)else

mark = 0;

}return

0;}

hdu1007 最近點對

題意 給你n個點,讓你求最近的兩個點的距離是多少.思路 這個題目我沒思路,我在網上看的是什麼分治 鴿巢原理,分治我知道,鴿巢原理我也知道,但是這個題目就是沒有證明出來他和鴿巢原理有jm關係,總之就是先以x或者y優先sort一下,然後每次列舉每個相鄰點的附近5個就行了 加自己一共六個 而且這個題目的前...

HDU 1007 最近點對

分治法求最近點對 遞迴將點不斷分成小組,計算最短距離。此時的最短距離僅僅是兩點都屬兩塊的某一塊 這裡的分割點是mid點 還需要考慮兩點分屬兩塊的情況。這時對於選點則把範圍縮小到了以mid為中心。再將距離mid點x軸2 mindist範圍點考慮在內。在這些點中,再取mid點,留下那些 y的距離不大於m...

hdu 1007 最近點對

最近點對問題定義 已知上m個點的集合,找出對接近的一對點。在二維空間裡,可用分治法求解最近點對問題。預處理 分別根據點的x軸和y軸座標進行排序,得到x和y,很顯然此時x和y中的點就是s中的點。情況 1 點數小於等於三時 情況 2 點數大於三時 首先劃分集合s為sl和sr,使得sl中的每乙個點位於sr...