$n \leq 10000$个盒子,有高度,高度总和$\leq 10000$,盒子有重要的和不重要的,问最多有多少重要盒子的底端在区间$[L,R]$。

这是个入门级的DP,但需要一点胆量MD这题能放DIV1E。。

放盒子顺序:不重要的,重要的,然后乱放。不重要的可以无脑放,但重要的需要一定的顺序。。

其实重要的盒子按从大到小的顺序无脑叠就行了。。为啥。。

如果是在$L$处的话,那大的堆下面可以把小的送上去;如果是在$L,R$间,那顺序无所谓;如果是在$R$处,先大再小肯定不优,但我们是在01背包,因此大的那个完全可以丢掉。。

有个小问题,底端算答案有点难,不如把整个问题倒过来用顶端算贡献。

为啥这题都不会啊有没有大佬来拯救一下QAQ

 #include<stdio.h>
#include<string.h>
#include<stdlib.h>
//#include<math.h>
//#include<queue>
//#include<vector>
#include<algorithm>
#include<iostream>
//#include<assert.h>
using namespace std; int n,L,R,H;
#define maxn 10011
int f[maxn],a[maxn],la=,b[maxn],lb=,c[maxn];
bool cmp(const int &a,const int &b) {return a>b;} int main()
{
scanf("%d%d%d",&n,&L,&R);
for (int i=;i<=n;i++) scanf("%d",&c[i]),H+=c[i];
L^=R^=L^=R; L=H-L; R=H-R;
for (int i=,x;i<=n;i++) {scanf("%d",&x); if (x) b[++lb]=c[i]; else a[++la]=c[i];} for (int i=;i<=H;i++) f[i]=-0x3f3f3f3f; f[]=;
for (int i=;i<=la;i++)
for (int j=H;j>=a[i];j--)
f[j]=max(f[j],f[j-a[i]]); sort(b+,b++lb,cmp);
for (int i=;i<=lb;i++)
for (int j=H;j>=b[i];j--)
f[j]=max(f[j],f[j-b[i]]+(L<=j && j<=R));
// for (int i=0;i<=H;i++) cout<<f[i]<<' ';cout<<endl; int ans=;
for (int i=;i<=H;i++) ans=max(ans,f[i]);
printf("%d\n",ans);
return ;
}

DP的序--Codeforces956E. Wardrobe的更多相关文章

  1. 【LibreOJ】#6395. 「THUPC2018」城市地铁规划 / City 背包DP+Prufer序

    [题目]#6395. 「THUPC2018」城市地铁规划 / City [题意]给定n个点要求构造一棵树,每个点的价值是一个关于点度的k次多项式,系数均为给定的\(a_0,...a_k\),求最大价值 ...

  2. HDU 5293 Annoying problem 树形dp dfs序 树状数组 lca

    Annoying problem 题目连接: http://acm.hdu.edu.cn/showproblem.php?pid=5293 Description Coco has a tree, w ...

  3. 树形DP+DFS序+树状数组 HDOJ 5293 Tree chain problem(树链问题)

    题目链接 题意: 有n个点的一棵树.其中树上有m条已知的链,每条链有一个权值.从中选出任意个不相交的链使得链的权值和最大. 思路: 树形DP.设dp[i]表示i的子树下的最优权值和,sum[i]表示不 ...

  4. HDU 5293 Tree chain problem 树形dp+dfs序+树状数组+LCA

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5293 题意: 给你一些链,每条链都有自己的价值,求不相交不重合的链能够组成的最大价值. 题解: 树形 ...

  5. DP的序--Codeforces626F. Group Projects

    $n \leq 200$个数,$ \leq 500$,$K \leq 1000$代价内的数字分组有多少?一个分组的代价是分成的每个小组的总代价:一个小组的代价是极差. 问的极差那就从极入手嘛.一个小组 ...

  6. [jzoj 5661] 药香沁鼻 解题报告 (DP+dfs序)

    interlinkage: https://jzoj.net/senior/#contest/show/2703/0 description: solution: 注意到这本质就是一个背包,只是选了一 ...

  7. 背单词(AC自动机+线段树+dp+dfs序)

    G. 背单词 内存限制:256 MiB 时间限制:1000 ms 标准输入输出 题目类型:传统 评测方式:文本比较   题目描述 给定一张包含N个单词的表,每个单词有个价值W.要求从中选出一个子序列使 ...

  8. 刷题总结——Tree chain problem(HDU 5293 树形dp+dfs序+树状数组)

    题目: Problem Description Coco has a tree, whose vertices are conveniently labeled by 1,2,…,n.There ar ...

  9. 两道DP,四年修一次路

    第十一届:山区修路 题目描述 SNJ位于HB省西部一片群峰耸立的高大山地,横亘于A江.B水之间,方圆数千平方公里,相传上古的神医在此搭架上山采药而得名.景区山峰均在海拔3000米以上,堪称" ...

随机推荐

  1. 上下文 xx

    上下文,就是指在程序中的某个位置,可以访问到的所有资源的总和. 具体说来,在程序中资源可能是一个变量.一个常量.一个类的引用等等.

  2. layui 数据table隐藏表头

    $('.layui-table .layui-table-cell > span').css({'font-weight': 'bold'});//表头字体样式 /*$('th').css({' ...

  3. Python 解压序列、可迭代对象并赋值给多个变量

    Python数据结构和类型 1.1 解压序列赋值给多个变量 现在有一个包含N个元素的元组或者是序列,怎样将它里面的值解压后同时赋值给N个变量? 解决思路:先通过简单的解压赋值给多个变量,前提是变量的数 ...

  4. CPP-基础:windows api 多线程---互斥量、信号量、临界值、事件区别

    http://blog.csdn.net/wangsifu2009/article/details/6728155 四种进程或线程同步互斥的控制方法:1.临界区:通过对多线程的串行化来访问公共资源或一 ...

  5. rocketmq 命令示例

    http://www.360doc.com/content/16/0111/17/1073512_527143896.shtml http://www.cnblogs.com/marcotan/p/4 ...

  6. iOS面试集锦3

    1.写一个NSString类的实现 + (id)initWithCString:(c*****t char *)nullTerminatedCString encoding:(NSStringEnco ...

  7. laravel模型关联与列表展示

    上面这个是一个模型关联的图,其实我们很容易去理解 比如说,一对一,也就是说一个用户对应的是一个手机号. 一对多,比如说一篇文章可以有多条评论 一对多反向:如一篇文章可以有多条评论,但对应每条评论也只针 ...

  8. 时间格式的处理和数据填充和分页---laravel

    时间格式文档地址:http://carbon.nesbot.com/docs/ 这是些时间格式,只需要我们这么做就可以 我们在模板层,找到对应的模型对象那里进行处理就可以啦 2018-11-08 16 ...

  9. [php] 高级教程

    include 和 require 语句用于在执行流中插入写在其他文件中的有用的代码. include 和 require 除了处理错误的方式不同之外,在其他方面都是相同的: require 生成一个 ...

  10. Python9-封装-day26(大年初三)

    class Room: def __init__(self,name,length,width): self.__name = name self.__length = length self.__w ...