2011大連賽區網路賽 HDOJ

2021-05-27 23:01:00 字數 2737 閱讀 7569

【hdu4001】

problem address:

【思路】

dp。按長和寬從小到大、d值從大道小排序。

dp[i] = max(block[i].c, dp[j]+block[i].c)。其中1<=jdp[j]+block[i].c表示當i可以疊加在j上面時的值。如果不可疊加就無需計算。

注意排序中的d值。

還需要注意dp陣列用整型會溢位。

【**】

#include #include using namespace std;

const int maxn = 1000;

struct block

b[maxn+5];

bool cmp(const block &a, const block &b)

inline __int64 max(__int64 a, __int64 b)

__int64 dp[maxn+5];

int main()

else if (b[i].d==1)

else

}} __int64 ans = -1;

for (i=0; ians)

ans = dp[i];

} printf("%i64d\n", ans);

} return 0;

}

【hdu4002】

problem address:

【思路】

數學題。

化簡式子結果為質數從小到大相乘直到剛好不大於所給的數時的數。

可以先把質數相乘結果儲存起來,60以內的質數相乘即可達到100位以上。

對於給定的數字掃瞄找出所須答案。

【**】

#include #include using namespace std;

char num[54][120] =

;int ct[54] = ;//先把上面結果的長度存起來效率會有所提高

int main()

printf("%s\n", num[i-1]);

} return 0;

}

【hdu4004】

problem address:

【思路】

二分。上屆為l,下界為相鄰位置的距離的最大值。

注意要先排序。

【**】

#include #include using namespace std;

const int maxn = 500000;

int pt[maxn+5];

inline int solve(int mid, int l)

return ct;

}int main()

right = l;

ans = int_max;

while(left<=right)

else

}printf("%d\n", ans);

} return 0;

}

【hdu4006】

problem address:

【思路】

最小堆。

用最小堆維護最大的k個值。

插入時,如果堆個數未滿k個,則直接插入;

如果已滿,則如果該數比堆最小的數大,則替換並對堆進行維護,如果比最小的數還小,則無需插入。

【**】

#include #include using namespace std; 

int minheap[100005], lenmin;

void exchange(int &a, int &b)

void min_heap_insert(int v)//×îð¡¶ñµä²åèë

} void min_heapify(int i)//×îð¡¶ñµä¤ }}

else

}} return 0;

}

【hdu4007】

problem address:

【思路】

座標離散化。

由於點的規模只有1000個,而座標範圍太大,所以需要離散化點。

對於存在的xy座標值儲存起來。假如有ctx個x座標,cty個y座標。

如果(x,y)有點,則標為1,否則為0。然後用sum[x][y]陣列儲存該點到(0,0)點所成矩陣的點個數和。

然後列舉新的ctx*cty的矩陣。

對於矩陣中的每乙個點,將其作為area的右下頂點,利用sum可以計算其再 r 的範圍內的點個數。

記錄其最大值即為答案。

【**】

#include #include #include using namespace std;

const int maxn = 1000;

int sum[maxn+5][maxn+5];

int x[maxn+5], y[maxn+5];

int ctx, cty;

struct point

pt[maxn+5];

inline int max(int a, int b)

int main()

{ mappx, py;

int n, r;

int i, j;

point temp;

while(scanf("%d %d", &n, &r)!=eof)

{ for (i=0; i

hdu 4001 dp 2011大連賽區網路賽A

題意 給一些指定長寬高的磚,求能累出的最大高度,不同磚有不同編號,每種編號對下面的磚做出了限制 dp注意輸出要用 i64d,否則會wa,以後不用 lld了 sample input 3 10 10 12 0 10 10 12 1 10 10 11 2 210 10 11 1 10 10 11 1 0...

hdu 4004 二分 2011大連賽區網路賽D

題意 乙個長為l的河,中間有n個石子,小青蛙需要跳少於m次過河,判斷小青蛙每次跳躍最大距離的最小值 最大值最小,用二分 sample input 6 1 2 225 3 3112 18sample output411 2015 07 27 備戰區域賽專題 1 include2 include3 in...

CCPC杭州賽區和ICPC大連賽區

連著兩場比賽大連杭州趕著跑當前挺累的 結果一般般吧,兩個銅牌 大連賽區裡銀牌其實挺近了,但是有時候就是差了那麼一些。杭州就很無奈了,一題卡了精度,一題怎麼改都是wa,然後重新寫了一遍就一次ac了 明明之前希望的獎牌,當真的拿到,就又開始懷疑銅牌的意義有多大,看到各路大牛所達到的水平,感覺自己真是 總...