hdu 5495 Fxx and game(dp+单调队列优化)
2016-10-30 22:40
441 查看
bestcoder#89 的第二题……初测过了,终测全部挂掉了……
本来以为是贪心,后来才发现是dp,要用单调队列维护。
看了学霸的代码,单调队列的模板就借用了╭(╯^╰)╮
代码如下:
本来以为是贪心,后来才发现是dp,要用单调队列维护。
看了学霸的代码,单调队列的模板就借用了╭(╯^╰)╮
代码如下:
#include <iostream> #include <string> #include <cstring> #include <cstdio> #include <queue> #include <algorithm> using namespace std; #define maxn 1000005 #define inf 0x3f3f3f3f template <typename Item>struct monotone_queue { std::deque<Item> data,aux;//原本队列之外的辅助队列 int size(){return data.size();} void push(Item it) { data.push_back(it); while(!aux.empty() && aux.back()>it)aux.pop_back(); aux.push_back(it); } void pop() { if(data.front() == aux.front())aux.pop_front(); data.pop_front(); } Item top() { return aux.front(); } void init(){ data.clear(); aux.clear(); } }; int dp[maxn]; int main() { int T,t,x,k; cin>>T; monotone_queue<int> mq; while(T--){ cin>>x>>k>>t; mq.init(); memset(dp,0,sizeof(dp)); dp[1]=0; mq.push(dp[1]); for(int i=2;i<=x;i++){ dp[i]=mq.top()+1; if(i%k==0) dp[i]=min(dp[i],dp[i/k]+1); mq.push(dp[i]); if(mq.size()>t) mq.pop(); } cout<<dp[x]<<endl; } return 0; }
相关文章推荐
- hdu 5945 Fxx and game 单调队列优化dp
- HDU 5945 / BestCoder Round #89 1002 Fxx and game 单调队列优化DP
- hdu 5945 Fxx and game(单调队列优化DP)
- HDU 5945 Fxx and game (DP+单调队列优化)
- hdu 5945 Fxx and Game dp(单调队列优化)
- HDU 5945 Fxx and game 单调队列优化DP
- 【HDU 5945】 Fxx and game 【单调队列优化dp】
- 【hdu 5945 】 【dp+单调队列优化】Fxx and game【求数x最少经过多少次变换能变为1,(1)如果x%k==0,那么可以x=x/k。(2)x=x-i,(1<=i<=t)】
- HDU 5945 Fxx and game(dp+单调队列优化)
- hdu 5945 Fxx and game【dp+单调队列】
- BestCoderRound#89 HDU 5945 Fxx and game【单调队列+DP】
- 【HDU 5945】Fxx and game(DP+单调队列)
- [hdu 5945 Fxx and game] dp+单调队列
- HDU-5945 Fxx and game (dp+单调队列)
- hdu 5945 Fxx and game(dp+单调队列)
- HDU_5945_Fxx and game_DP_单调队列
- 【hdu 5945】Fxx and game(递推|dp+单调队列)
- HDU 5945 Fxx and game(DP+单调队列)
- hdu 5945 Fxx and game (dp+单调队列)
- HDU 5945 Fxx and game (DP+单调队列)