BZOJ 2021 Usaco2010 Jan Cheese Towers 动态规划
2017-08-01 08:33
609 查看
题目大意:全然背包。假设最顶端的物品重量≥k,那么以下的全部物品的重量变为原来的45
考虑一些物品装进背包,显然我要把全部重量大于≥k的物品中重量最小的那个放在最顶端。才干保证总重量最小
那么我们给物品排个序,第一键值为重量是否≥k(≥k的放在前面),第二键值为重量(从小到大)
然后依次增加背包。令fi表示没有重量≥k的物品放在最顶端时重量为i的最大价值。gi表示有重量≥k的物品放在最顶端是重量为i的最大价值。DP就可以
时间复杂度O(nT)
考虑一些物品装进背包,显然我要把全部重量大于≥k的物品中重量最小的那个放在最顶端。才干保证总重量最小
那么我们给物品排个序,第一键值为重量是否≥k(≥k的放在前面),第二键值为重量(从小到大)
然后依次增加背包。令fi表示没有重量≥k的物品放在最顶端时重量为i的最大价值。gi表示有重量≥k的物品放在最顶端是重量为i的最大价值。DP就可以
时间复杂度O(nT)
#include <cstdio> #include <cstring> #include <iostream> #include <algorithm> #define M 1010 using namespace std; int n,m,k; pair<int,int> a[M]; long long f[M],g[M]; bool Compare(const pair<int,int> &a,const pair<int,int> &b) { if(a.first!=b.first) { if( (a.first>=k)==(b.first>=k) ) return a.first<b.first; return a.first>b.first; } return a.second<b.second; } int main() { int i,j; cin>>n>>m>>k; for(i=1;i<=n;i++) scanf("%d%d",&a[i].second,&a[i].first); sort(a+1,a+n+1,Compare); memset(f,0xef,sizeof f); memset(g,0xef,sizeof g); f[0]=0; for(i=1;i<=n;i++) { int temp=a[i].first/5*4; if(a[i].first>=k) { for(j=a[i].first;j<=m;j++) g[j]=max(g[j],f[j-a[i].first]+a[i].second); } else { for(j=a[i].first;j<=m;j++) f[j]=max(f[j],f[j-a[i].first]+a[i].second); } for(j=temp;j<=m;j++) g[j]=max(g[j],g[j-temp]+a[i].second); } long long ans=0; for(i=0;i<=m;i++) { ans=max(ans,f[i]); ans=max(ans,g[i]); } cout<<ans<<endl; return 0; }
相关文章推荐
- BZOJ 2021 Usaco2010 Jan Cheese Towers 动态规划
- [BZOJ 2021] Usaco 2010 Cheese Towers · 动态规划
- BZOJ2021: [Usaco2010 Jan]Cheese Towers
- 【BZOJ】2021: [Usaco2010 Jan]Cheese Towers(dp)
- BZOJ 2021 [Usaco2010]Cheese Towers
- BZOJ 2021 [Usaco2010 Jan]Cheese Towers
- BZOJ_1778_[Usaco2010_Hol]_Dotp_驱逐猪猡_(期望动态规划+高斯消元+矩阵)
- bzoj 1575: [Usaco2009 Jan]气象牛Baric 动态规划
- Bzoj 1783: [Usaco2010 Jan]Taking Turns
- 【BZOJ1700】[Usaco2007 Jan]Problem Solving 解题 动态规划
- [博弈 DP] BZOJ1783: [Usaco2010 Jan]Taking Turns
- BZOJ1783: [Usaco2010 Jan]Taking Turns
- BZOJ 1785 [Usaco2010 Jan]telephone
- bzoj 1783: [Usaco2010 Jan]Taking Turns
- 【BZOJ】2020: [Usaco2010 Jan]Buying Feed, II (dp)
- bzoj 1783: [Usaco2010 Jan]Taking Turns
- BZOJ 1783 [Usaco2010 Jan]Taking Turns
- BZOJ_1613_ [Usaco2007_Jan]_Running_贝茜的晨练计划_(动态规划)
- 【BZOJ3886】【Usaco2015 Jan】Moovie Mooving 状态压缩 动态规划
- [bzoj1613][Usaco2008 Jan]Running贝茜的晨练计划_动态规划