同步:
話說發源於小朋友精心設計的遊戲被電腦組的童鞋們藐殺之後非常不爽,為了表示安慰和鼓勵,vip999 決定請他吃一次「年年大豐收」,為了表示誠意,他還決定親自去釣魚。
但是,因為還要準備 noip2013, z老師只給了他 hhh 個小時的空餘時間,假設有 nnn 個魚塘都在一條水平路邊,從左邊到右編號為 1, 2, 3 .. n 。
vip是個很講究效率的孩子,他希望用這些時間釣到盡量多的魚。他從湖1出發,向右走,有選擇的在一些湖邊停留一定的時間釣魚,最後在某乙個湖邊結束釣魚。他測出從第 i 個湖到第 i+1 個湖需要走 5×ti分鐘路,還測出在第 i 個湖停留,第乙個 5 分鐘可以釣到 fi 條魚,以後每再釣 5 分鐘,可以釣到的魚量減少 di ,若減少後的魚量小於 0,則減少後的魚量為 0 。為了簡化問題,他假定沒有其他人釣魚,也不會有其他因素影響他釣到期望數量的魚。請程式設計求出能釣最多魚的數量。
輸入格式:
第一行:湖的數量n。
第二行:時間h(小時)。
第三行:n個數,f1f_1f1,f2f_2f2,… fnf_nfn。
第四行:n個數,d1d_1d1,d2d_2d2,….dnd_ndn。
第五行:n-1個數,t1t_1t1,t2t_2t2,….tn−1t_tn−1
輸出格式:
乙個數,所能釣魚的最大數量。
輸入樣例#1:
2
110 1
2 5
2
輸出樣例#1:
31
1 <= h <= 16
2 <= n <= 25
首先感謝perisno大佬
列舉停止的池子,並計算出從頭走到這裡所需要的時間tm[i]
(輸入時搞成字首和)
則可釣魚的時間為(h-tm[i])
將前i
個池子能釣的魚push
進priority_queue
裡,
在時間結束前pop
出當前能釣最多魚的池子,
減去應減的數量再push
回去。
這樣可以求出應在每個池子分別釣多久魚。
答案為在每個池子停留的最優解的最大值。
#include#include#include#includeusing namespace std;
const int maxn=1e5+5;
struct pond
for(int i=1;i<=n;++i)
for(int i=1;i>tm[i+1];
tm[i+1]+=tm[i]; }
int ans=0;
for(int i=1;i<=n&&h-tm[i]>0;++i)
while(!q.empty()&&ti)
ans=max(ans,cnt);
} cout
}
洛谷 P1717 釣魚
題目 釣魚 題意 剛開始沒讀懂 就是說有一排魚塘 i n 每乙個魚塘初始魚的數量為fi,在這個魚塘中每釣5分鐘魚的數量都會減少di,且從第i個魚塘走到第i 1個魚塘要用ti的時間。問從第乙個魚塘開始走,到任意乙個魚塘結束,最多可以獲得的魚的數量。思路 luogu大佬 超神火星人 的部落格 列舉最後最...
洛谷P1717 釣魚
題目大意 給定 n 個位置,每個位置有乙個答案貢獻值,在乙個位置加了一次該位置的答案貢獻值之後,該值會減掉一部分,從乙個位置移動到另乙個位置需要花費一定的時間,問 給定 m 單位的時間,如何移動使得答案貢獻值最大。初始在1位置 題解 引理 若想使答案貢獻值最大,一定不能走回頭路,因為走回頭路時,可以...
洛谷 P1717 釣魚
話說發源於小朋友精心設計的遊戲被電腦組的童鞋們藐殺之後非常不爽,為了表示安慰和鼓勵,vip999決定請他吃一次 年年大豐收 為了表示誠意,他還決定親自去釣魚,但是,因為還要準備2013noip,z老師只給了他h 1 h 16 個小時的空餘時間,假設有n 2 n 25 個魚塘都在一條水平路邊,從左邊到...