[DP 决策单调性] Codeforces Gym 101002H .Jewel Thief
2017-09-02 09:25
507 查看
体积很小,可以把物品按体积分类。
枚举每种体积,做背包。
对于体积 S ,把体积为 S 的物品案价值从大到小排序,VS 为前缀和
fi,j=max{fi−1,j−k×S+Vk×S}
然后看Manchery博客可以发现这个东西是有决策单调性的…
分治一下。
枚举每种体积,做背包。
对于体积 S ,把体积为 S 的物品案价值从大到小排序,VS 为前缀和
fi,j=max{fi−1,j−k×S+Vk×S}
然后看Manchery博客可以发现这个东西是有决策单调性的…
分治一下。
#include <cstdio> #include <iostream> #include <algorithm> #include <vector> using namespace std; typedef long long ll; const int N=100010; int n,s,v,k; ll f[2] ; vector<ll> c[310]; void solve(int l,int r,int L,int R,int x,int y){ if(l>r) return ; int mid=l+r>>1,nxt=mid; for(int i=min(R,mid-1);i>=L;i--){ if(mid-i>c[y].size()) break; if(f[s][i*y+x]+c[y][mid-i-1]>f[s^1][mid*y+x]) f[s^1][mid*y+x]=f[s][i*y+x]+c[y][mid-i-1],nxt=i; } solve(l,mid-1,L,nxt,x,y); solve(mid+1,r,nxt,R,x,y); } int main(){ scanf("%d%d",&n,&k); for(int i=1;i<=n;i++) scanf("%d%d",&s,&v),c[s].push_back(v); s=0; for(int i=1;i<=300;i++,s^=1){ for(int j=0;j<=k;j++) f[s^1][j]=f[s][j]; if(!c[i].size()) continue; sort(c[i].begin(),c[i].end(),greater<int>()); for(int j=1;j<c[i].size();j++) c[i][j]+=c[i][j-1]; for(int j=0;j<i;j++) solve(0,(k-j)/i,0,(k-j)/i,j,i); for(int j=1;j<=k;j++) f[s^1][j]=max(f[s^1][j],f[s^1][j-1]); } for(int i=1;i<=k;i++) printf("%lld ",f[s][i]); return 0; }
相关文章推荐
- codeforces Gym 100500H A. Potion of Immortality 简单DP
- [暴力 树形DP] Codeforces Gym 100553H NEERC14 H. Hidden Maze
- Codeforces Gym 100548H The Problem to Make You Happy (图上博弈DP)
- Codeforces Gym 100543G Virus synthesis (Palindromic Tree + DP) 2014欧洲中部赛区G题
- Codeforces Gym 100286F Problem F. Fibonacci System 数位DP
- Codeforces Gym 100002 Problem F "Folding" 区间DP
- codeforces gym 2016-2017 NEERC, Moscow Subregional K. Knights of the Old Republic 最小生成树+dp
- codeforces gym 100357 H (DP 高精度)
- [DP] Codeforces Gym 101002 H. Jewel Thief
- Codeforces Gym - 101617A Ducks in a Row [DP]
- Codeforces Gym 100379J Move the (p, q)-knight to the corner! 组合数学DP, Lucas定理
- Codeforces Gym 100676G Training Camp 状压dp
- codeforces Gym 100500Problem H. ICPC Quest 简单DP
- 【数位DP】Codeforces Gym 100418J Lucky tickets
- Codeforces Gym 100337B Lempel-Ziv Compression 字符串DP
- Codeforces Gym 100325A String Decomposition 字符串DP
- Codeforces Gym-101617G - Rainbow Roads [树形DP]
- Codeforces Gym 100418J Lucky tickets 数位DP
- [树形DP 费用流手动增广] Codeforces Gym 101190 NEERC 16 M. Mole Tunnels
- Codeforces Gym 100339B Diversion 树形DP + LCA