我們把釣魚的過程放在座標系裡來考慮。圖中藍色的點為船,初始時它的座標記為(ax,y)。河深為y,河寬為x。某個時刻會從左邊界或右邊界遊出來一條魚(左邊的往右邊遊,右邊的往左邊遊),即魚游出來時的橫座標為0或x,這條魚每秒會游d個單位長度,魚的長度為l。初始時刻為0,對於每個時刻x,船可以選擇花費1s向左或向右移動最多q個單位長度,或者選擇在當前位置進行釣魚,釣魚的動作是瞬間的,且發生在時刻x,魚還來不及移動就被釣上了。如果選擇釣魚,那麼在時刻x就不能動。設當前位置為z,將魚看成一條線段,當線段與直線x=z相交時就認為魚上鉤了,所以一次釣魚動作可能會釣多條魚。
聰明的你告訴釣魚者,在t時刻前最多能釣多少魚?
第一行:t
第二行:maxx,maxy,表示河寬和河深
第三行:兩個數ax,q
第四行:n,表示有n條魚
接下來n行描述每條魚:每行共五個數,x,y,d,l,time
x表示魚頭的初始位置,保證為0或maxx,y表示魚頭的初始深度,time表示魚出現的時刻(所有的數都為整數)
只有一行:ans,表示最多的釣魚數
34 5
4 13
0 1 3 1 0
4 2 2 1 0
0 3 3 1 2
30%的資料滿足
1<=n<=5
100%的資料滿足
1<=t,time<=10
1<=ax,ay,q,x,y,d,l<=10
1<=n<=14
容易想到dp
發現資料很小,可以用狀壓dp
設f[i][j][k]為時間i,x座標j,釣魚的狀態為k的最大釣魚數
1、移動:f[i+1][j-q ~ j+q][k]=f[i][j][k]
2、釣魚:f[i+1][j][k]=f[i][j][k]+fish(i,j,k)
3、不作操作:f[i+1][j][k]=f[i][j][k]
#include
#include
#include
#define n 15
using
namespace std;
int ans,t,mx,my,ax,q,n,p[n]
,q[n]
,d[n]
,l[n]
,t[n]
,f[n]
[n][
17007];
intfish
(int x,
int y,
int z)
return z;
}int
main()
printf
("%d"
,ans)
;}
NOIP2011模擬11 1 釣魚
我們把釣魚的過程放在座標系裡來考慮。圖中藍色的點為船,初始時它的座標記為 ax,y 河深為y,河寬為x。某個時刻會從左邊界或右邊界遊出來一條魚 左邊的往右邊遊,右邊的往左邊遊 即魚游出來時的橫座標為0或x,這條魚每秒會游d個單位長度,魚的長度為l。初始時刻為0,對於每個時刻x,船可以選擇花費1s向左...
NOIP2011模擬考試總結
這兩天的考了noip2011的6道題,600分的題大致得了420分左右。a了day1的t1,t2,day2的t1。這次模擬我感覺沒有發揮到自己的飽和水平,犯了非常傻比的錯。day1的第三題讀豎列時,題目說了以零結尾,我還手賤寫了個y 7,這樣如果這一列是滿的話,最後乙個0會被下一列讀進去。把y 7刪...
NOIP2011 模擬 鋪地毯
題目描述 description 為了準備乙個獨特的頒獎典禮,組織者在會場的一片矩形區域 可看做是平面直角座標系的第一象限 鋪上一些矩形地毯。一共有n 張地毯,編號從1 到n。現在將這些地毯按照編號從小到大的順序平行於座標軸先後鋪設,後鋪的地毯覆蓋在前面已經鋪好的地毯之上。地毯鋪設完成後,組織者想知...