codevs 5429 完全背包
单调队列优化。
好像有点烦。。。调了许久。
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#define maxn 7050
using namespace std;
long long n,m,v[maxn],w[maxn],c[maxn],up[maxn],q[maxn],l,r,ret1,ret2,val[maxn],dp[maxn];
void get_up(long long x)
{
for (long long i=;i<=m%v[x];i++)
up[i]=(m/v[x])*v[x]+i;
for (long long i=m%v[x]+;i<=v[x]-;i++)
up[i]=(m/v[x]-)*v[x]+i;
}
void insert(long long x,long long y,long long z)
{
while ((l<=r) && (val[r]<=dp[x]-y*w[z])) r--;
q[++r]=x;val[r]=dp[x]-y*w[z];
}
int main()
{
scanf("%lld%lld",&n,&m);
for (long long i=;i<=n;i++)
scanf("%lld%lld%lld",&v[i],&w[i],&c[i]);
for (long long i=;i<=n;i++)
{
get_up(i);
for (long long j=;j<v[i];j++)
{
l=;r=;long long now=up[j],lim=up[j];ret1=ret2=up[j]/v[i];
while (now>=)
{
while ((l<=r) && (q[l]>now)) l++;
while ((lim>=now-c[i]*v[i]) && (lim>=))
{
insert(lim,ret2,i);
lim-=v[i];ret2--;
}
dp[now]=val[l]+ret1*w[i];ret1--;now-=v[i];
}
}
}
printf("%lld\n",dp[m]);
return ;
}
codevs 5429 完全背包的更多相关文章
- codevs 5429 多重背包
5429 多重背包 http://codevs.cn/problem/5429 分析: f[i]=g[j-k*siz[i]]+k*val[i]; 发现一个状态d只会更新,d+siz[i],d+2*si ...
- Codevs 3269 混合背包(二进制优化)
3269 混合背包 时间限制: 1 s 空间限制: 256000 KB 题目等级 : 钻石 Diamond 传送门 题目描述 Description 背包体积为V ,给出N个物品,每个物品占用体积为V ...
- codevs 3269 混合背包
题目描述 Description 背包体积为V ,给出N个物品,每个物品占用体积为Vi,价值为Wi,每个物品要么至多取1件,要么至多取mi件(mi > 1) , 要么数量无限 , 在所装物品总体 ...
- codevs 3269 混合背包(复习混合背包)
传送门 [题目大意]给出物品的数量.-1为无限个. [思路]混合背包.... [code] #include<iostream> #include<cstdio> #inclu ...
- O(V*n)的多重背包问题
多重背包问题: 有n件物品,第i件价值为wi,质量为vi,有c1件,问,给定容量V,求获得的最大价值. 朴素做法: 视为0,1,2,...,k种物品的分组背包 [每组只能选一个] f[i][j]=Ma ...
- 树形dp练习
/*poj 1463 最小点覆盖 匈牙利*/ #include<iostream> #include<cstdio> #include<cstring> #defi ...
- 算法笔记--单调队列优化dp
单调队列:队列中元素单调递增或递减,可以用双端队列实现(deque),队列的前面和后面都可以入队出队. 单调队列优化dp: 问题引入: dp[i] = min( a[j] ) ,i-m < j ...
- 树形DP+(分组背包||二叉树,一般树,森林之间的转换)codevs 1378 选课
codevs 1378 选课 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题目描述 Description 学校实行学分制.每门的必修课都有固定的学分 ...
- codevs 3372 选学霸(hash+并查集+多重背包)
先通过并查集处理出来有多少种不同的集合,每一个集合有多少人.一定要不要忘记了与别的没有联系的独立点. 并查集的时候能够通过hash处理出来每一个数目同样的集合的个数. 这样以人数为权值.个数为限制进行 ...
随机推荐
- github如何pull最新代码
github现在已经经常用了,但是经常遇到下面的问题 比如:从一个项目A中fork了一个分支B,并且在分支B有了改动.过了几天后,项目A中的代码应该会有很多人提交修改了,现在想将最新的代码pull ...
- java版本的学生管理系统
import java.awt.BorderLayout; import java.awt.Color; import java.awt.Frame; import java.awt.event.Ac ...
- jquery iframe高度自适应
$(document).ready(function () { $("#test").load(function () { var thisheight = $(this).con ...
- useradd/du/df/passwd/usermod命令
一.useradd命令 useradd命令-M -u -s -g 常用 -c:加上备注文字,备注文字保存在passwd的备注栏中. -d:指定用户登入时的启始目录. -D:变更预设值.(修改默认配置 ...
- ComboBox绑定
this.ComboBox1.AutoCompleteMode = AutoCompleteMode.SuggestAppend; this.ComboBox1.AutoCompleteSource ...
- [Js]高级运动
一.链式运动框架 1.他需要一个回调函数,在运动停止时,开始下一次运动(执行函数) 多物体运动框架改为如下: function startMove(obj,attr,iTarget,fn){ ... ...
- 上传项目的更改 info.plist文件
info.plistOpen AsSource As 添加<key>NSAppTransportSecurity</key> <dict> &l ...
- POJ 2632 Crashing Robots 模拟 难度:0
http://poj.org/problem?id=2632 #include<cstdio> #include <cstring> #include <algorith ...
- Java longTime 和C#日期转换
封装一下,可直接用. 以后碰到java的long time,直接使用DateTime dt=ConvertJavaDateTimeToNetTime(1207969641193);这样使用即可. 这串 ...
- partition by
在row_number() over()中的over使用,其后需要配合order by ROW_NUMBER () over (partition by username order by i ...