[暴力DP][暴力STL]SNOI2017 && LOJ#2256. 英雄联盟
2017-07-06 20:42
239 查看
列出DP方程
fi,j=min{fi−1,jk+k×Ci,k|j且k≤Ki }
fi,j表示前i个物品产生j中方案时的最小价格
j很大,有1018,但是j只有2,3,5,7三种质数,所以j能取到的值上限为(logm)4,而且远小于这个上限。
因为懒,所以不继续优化下去了……DP数组直接用map存一下,转移时遍历一遍。
然而本地跑了10多秒,开了O2跑进3秒,交上去T了最后一个点…
map不行就换unordered_map,硬生生跑进0.5s……
fi,j=min{fi−1,jk+k×Ci,k|j且k≤Ki }
fi,j表示前i个物品产生j中方案时的最小价格
j很大,有1018,但是j只有2,3,5,7三种质数,所以j能取到的值上限为(logm)4,而且远小于这个上限。
因为懒,所以不继续优化下去了……DP数组直接用map存一下,转移时遍历一遍。
然而本地跑了10多秒,开了O2跑进3秒,交上去T了最后一个点…
map不行就换unordered_map,硬生生跑进0.5s……
#include <cstdio> #include <iostream> #include <algorithm> #include <tr1/unordered_map> #define fi first #define se second using namespace std; using namespace tr1; typedef long long ll; unordered_map<ll,ll> f,g; int n,k[210],c[210]; ll m,ans; inline void fix(ll &x,ll y){ if(x>y) x=y; } int main(){ scanf("%d%lld\n",&n,&m); for(int i=1;i<=n;i++) scanf("%d",&k[i]); for(int i=1;i<=n;i++) scanf("%d",&c[i]); f[0]=0; ans=1LL<<60; for(int i=1;i<=n;i++){ for(auto v : f){ if(v.fi==0){ for(int j=1;j<=k[i];j++) if(g.count(j)) fix(g[j],j*c[i]); else g[j]=j*c[i]; g[0]=0; continue; } if(g.count(v.fi)) fix(g[v.fi],v.se); else g[v.fi]=v.se; for(int j=2;j<=k[i];j++){ if(v.fi*j>=m){ fix(ans,v.se+j*c[i]); break; } if(v.se+j*c[i]>=ans) break; if(g.count(v.fi*j)) fix(g[v.fi*j],v.se+c[i]*j); else g[v.fi*j]=v.se+c[i]*j; } } swap(f,g); g.clear(); } printf("%lld\n",ans); return 0; }
相关文章推荐
- “盛大游戏杯”第15届上海大学程序设计联赛夏季赛暨上海高校金马五校赛题解&&源码【A,水,B,水,C,水,D,快速幂,E,优先队列,F,暴力,G,贪心+排序,H,STL乱搞,I,尼姆博弈,J,差分dp,K,二分+排序,L,矩阵快速幂,M,线段树区间更新+Lazy思想,N,超级快速幂+扩展欧里几德,O,BFS】
- 【背包 or STL乱搞】BZOJ5018(Snoi2017)[英雄联盟]题解
- Kitty's Game zoj3644(dp+stl)
- hdu - beautiful number-5179 - 暴力打表&DFS&数位DP
- [BZOJ]5018: [Snoi2017]英雄联盟 DP
- UVA 11059 - Maximum Product( 暴力 & dp之LIS )
- Codeforces 891A Pride (dp & 数学 & 贪心 & 暴力)
- 对C++ STL iostram 中 cin.get(char* cs,int size,char c='/n') 的理解
- STL(shipped with VC6) Questions & Answers(四)
- STL(shipped with VC6) Questions & Answers(四)
- STL(shipped with VC6) Questions & Answers(四)
- About Search & DP
- STL之stack&queue容器(笔记)
- STL(VC6) Good Q&A(五):Are Containers Thread Safe?
- STL(VC6) Good Q&A(五):Are Containers Thread Safe?
- STL(VC6) Good Q&A(五):Are Containers Thread Safe?
- STL(VC6) Good Q&A(五):Are Containers Thread Safe?
- 不要在DEBUG模式下使用STL实现"复杂的"算法
- STL之set&multiset容器(笔记)
- STL实践(string&IO)