【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了 明明之前希望的獎牌,當真的拿到,就又開始懷疑銅牌的意義有多大,看到各路大牛所達到的水平,感覺自己真是 總...