DP 洛谷P2134 百日旅行

2022-05-27 00:51:13 字數 1270 閱讀 1776

題目背景

重要的不是去**,而是和你在一起。——小紅

對小明和小紅來說,2023年7月29日是乙個美好的日子。這一天是他們相識100天的紀念日。

(小明:小紅,感謝你2場大考時默默的支援,100個日夜的陪伴;感謝你照亮我100個美好的日子,給我留下無數美好的回憶……在這個美好的日子裡,我準備帶你去旅行。)

題目描述

小明和小紅還剩下n天的假期,小明可以安排旅行的計畫。如果連續x天旅遊,小明需要花旅行費用\(p*x*x\)元;如果連續x天不旅遊,小明需要請小紅吃飯,花費為q*x元。(p,q都是輸入的常數)

請你幫小明寫乙個程式,計算出假期裡他至少需要花費多少元。

輸入輸出格式

輸入格式:

一行,3個空格隔開的正整數n,p,q。

輸出格式:

一行,乙個正整數表示小明至少需要花費多少元。

經過分析,可以發現對於吃飯,我們只在乎它的時間總量,然後對於旅行,我們已經知道旅行的時間是n-吃飯的時間,又因為計算公式中含有平方,所以我們需要關心這n-i的時間分成了幾段。

這樣就可以開始寫\(n^2\)的演算法了。

第一層列舉吃飯時間,第二層列舉旅行時間分為多少段,\(o(1)\)計算即可。

code:

#include#includeusing namespace std;

inline int read()

while(ch>='0'&&ch<='9')

return sum*f;

}int n,p,q,ans=2147483647;

int main()

for(int i=0;i<=n;i++)

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

return 0;

}

寫完就可以發現最優情況下旅行的時間被平均分是最好的,所以找到了凸性函式的極值點直接帶就可以了。

100分

code:

#include#includeusing namespace std;

inline int read()

while(ch>='0'&&ch<='9')

return sum*f;

}int n,p,q,ans=2147483647;

int main()

for(int i=0;i<=n;i++)

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

return 0;

}

P2134 百日旅行

重要的不是去 而是和你在一起。小紅 對小明和小紅來說,2014年7月29日是乙個美好的日子。這一天是他們相識100天的紀念日。小明 小紅,感謝你2場大考時默默的支援,100個日夜的陪伴 感謝你照亮我100個美好的日子,給我留下無數美好的回憶 在這個美好的日子裡,我準備帶你去旅行。小明和小紅還剩下n天...

dp P2134 百日旅行

這個題目顯然有乙個n 2的做法 include include include using namespace std int f 200005 ff 200005 int n,m,p,q int main 標準的暴力 我們考慮優化 顯然q p的話直接全q就好了 然後對於ff陣列 直接不列舉了,結合...

洛谷P1137 旅行計畫(拓撲排序 dp)

題目描述 小明要去乙個國家旅遊。這個國家有n個城市,編號為1 n,並且有m條道路連線著,小明準備從其中乙個城市出發,並只往東走到城市i停止。所以他就需要選擇最先到達的城市,並制定一條路線以城市i為終點,使得線路上除了第乙個城市,每個城市都在路線前乙個城市東面,並且滿足這個前提下還希望遊覽的城市盡量多...