多重背包单调队列优化
2016-10-16 11:37
381 查看
/*后来该数据了那个题 原来的被卡常数了 重写了一份*/ #include<iostream> #include<cstdio> #include<cstring> #define maxn 7010 #define mem(a,b)for(int i=0;i<=m;i++)a[i]=b[i] #define mes(a,b)for(int i=0;i<=m;i++)a[i]=b using namespace std; int n,m,f[maxn],g[maxn],q[maxn],p[maxn],head,tail; int init(){ int x=0,f=1;char s=getchar(); while(s<'0'||s>'9'){if(s=='-')f=-1;s=getchar();} while(s>='0'&&s<='9'){x=x*10+s-'0';s=getchar();} return x*f; } void Pack(int w,int v,int c){ if(w>m)return; mes(g,0); for(int i=0;i<w;i++){ head=1;tail=0;g[i]=f[i]; q[++tail]=i;p[tail]=f[i]; for(int t=v,j=w+i;j<=m;j+=w,t+=v){ while(head<=tail&&p[tail]<=f[j]-t)tail--; tail++;q[tail]=j;p[tail]=f[j]-t; if((j-q[head])/w>c)head++; g[j]=p[head]+t; } } mem(f,g); } int main() { n=init();m=init(); int w,v,c; for(int i=1;i<=n;i++){ w=init();v=init();c=init(); Pack(w,v,c); } printf("%d\n",f[m]); return 0; }
相关文章推荐
- POJ 1742 Coins 多重背包单调队列优化
- POJ 1742 coins 多重背包单调队列优化
- poj 2754 Similarity of necklaces 2 转换成多重背包,单调队列优化/ 二进制优化
- 多重背包问题的单调队列优化 转载
- 多重背包的优化 二进制/单调队列解析
- 多重背包中多次背包 O(VN) 算法1 (单调队列优化) 带参考程序
- 多重背包,二进制优化,单调队列优化
- 单调队列优化多重背包
- 单调队列优化多重背包
- POJ 1742 Coins(多重背包 + 单调队列优化)
- poj 2373 单调队列优化背包
- hdu1171 (单调队列优化多重背包)
- 单调队列优化多重背包
- [Bzoj4182]Shopping(点分治)(树上背包)(单调队列优化多重背包)
- poj1742coins【单调队列优化多重背包】楼教主八题
- poj1014多重背包--单调队列优化
- 单调队列优化多重背包
- bzoj1296 [SCOI2009]粉刷匠 分组背包/单调队列优化
- hdu2191 悼念512汶川大地震遇难同胞——珍惜现在,感恩生活【单调队列优化多重背包】
- Dividing(多重背包、单调队列优化dp)