hdu 5188
it's a dp difficult problem
试想如果我们遇见这样一道题,:
有n道题目,每道题有一个得分v和用时t;
我们要得够w分;用时最少 怎么做??
这是一个裸奔的01背包
如果多一个规则,
每道题有一个开始时间,也就是开始做该题的时间不得少于一个时间st
现在怎么做?
我们应该把问题按照开始时间进行排序。
为什么?
用 st1 t1 与 st2 t2 来看
如果st1<st2
如果事情1先开始 那么所用时间ti1=st1+t1+(wait_time)t2
如果事情2先开始 那么所用时间是ti2=st2+t1+t2
从中可以看出ti1<ti2的
所以应该从开始时间少的开始做
#include <stdio.h>
#include <iostream>
#include <string.h>
#include <math.h>
#include <algorithm>
using namespace std;
#define ll long long
#define cl(a,b) memset(a,b,sizeof(a)) ll dp[];
typedef struct data
{
int v,t,l;
}D;
D da[]; int cmp(D a,D b)
{
int ax=a.l-a.t,bx=b.l-b.t;
if(ax!=bx)return ax<bx;
return a.l<b.l;
} int main()
{
int n;
ll w;
while(scanf("%d %I64d",&n,&w)!=EOF)
{
cl(dp,);
int i,j,k,s=;
for(i=;i<n;i++)
{
scanf("%d %d %d",&da[i].t,&da[i].v,&da[i].l);
s+=max(da[i].t,da[i].l);
}
sort(da,da+n,cmp);
for(i=;i<n;i++)
{
int st=max(da[i].t,da[i].l);
for(j=s;j>=st;j--)
{
dp[j]=max(dp[j],dp[j-da[i].t]+da[i].v);
// cout<<i<<" * "<<j<<" * "<<dp[j]<<endl;
}
}
for(j=;j<=s;j++)
{
// cout<<j<<' '<<dp[j]<<endl;
if(dp[j]>=w)break;
}
if(j<=s)printf("%d\n",j);
else printf("zhx is naive!\n");
}
return ;
}
hdu 5188的更多相关文章
- hdu 5188 zhx and contest [ 排序 + 背包 ]
传送门 zhx and contest Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Othe ...
- hdu 5188 dfs+二分
get了很多新技能 当时想到了用dfs,但是排序用的是限制时间排序,一直没搞出来. 正解: 二分用时,dfs判断,为了顺利进行做题,需要按照做题开始时间排序 还可以用dp 题意: 作为史上最强的刷子之 ...
- hdu 5188(带限制的01背包)
zhx and contest Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)T ...
- HDU 5188 背包
有N道题.要求得到最少W分 给出N道题的:每道题用时T.分数V,应在且必须在L时刻提交才干得分 问得到W分所用的最少的时间 以L-T排序,然后做01背包就可以 #include "stdio ...
- HDU 5188 zhx and contest(带限制条件的 01背包)
Problem Description As one of the most powerful brushes in the world, zhx usually takes part in all ...
- hdu 3401 单调队列优化+dp
http://acm.hdu.edu.cn/showproblem.php?pid=3401 Trade Time Limit: 2000/1000 MS (Java/Others) Memor ...
- HDOJ 2111. Saving HDU 贪心 结构体排序
Saving HDU Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total ...
- 【HDU 3037】Saving Beans Lucas定理模板
http://acm.hdu.edu.cn/showproblem.php?pid=3037 Lucas定理模板. 现在才写,noip滚粗前兆QAQ #include<cstdio> #i ...
- hdu 4859 海岸线 Bestcoder Round 1
http://acm.hdu.edu.cn/showproblem.php?pid=4859 题目大意: 在一个矩形周围都是海,这个矩形中有陆地,深海和浅海.浅海是可以填成陆地的. 求最多有多少条方格 ...
随机推荐
- CentOS 添加/绑定 IP
美国VPS的独立IP相对于国内而言,是非常的便宜的.比如有些美国VPS,买5个独立IP才三美元左右一个月.当我们购买了多个独立IP时,如果你不想再联系客服而漫长的等待,那就自己手动配置吧. 一.进入/ ...
- 基于.NET MVC的高性能IOC插件化架构(二)之插件加载原理
上一篇博文简单介绍了下插件化的代码组成部分:http://www.cnblogs.com/gengzhe/p/4390932.html,源码地址:https://github.com/luohuazh ...
- 信息安全实验三:privilege-separation
title: privilege-separation date: 2016-01-12 14:40:04 categories: tags: --- Exercise1 In order to ga ...
- toast组件较为完美版本
<!DOCTYPE html><html lang="en"> <head> <meta charset="UTF-8" ...
- C语言整数按照二进制逆序,输出逆序后的整数值
问题来源,今天早上和一舍友吃早餐的时候谈到的一个问题,将一个整数按照二进制逆序,然后输出逆序后的数值. 我们知道数值在内存中都是以二进制的形式存放的,假如我们是32位机,每8位为一个字节,int型在3 ...
- linux内存管理子系统
一.Linux内存管理模型 1.虚拟地址与物理地址的映射 2.物理地址的分配二.虚拟地址与物理地址的映射 1.虚拟地址空间分布 32位处理器有32根地址总线,可访问4G的物理空间.其中有0-3G为用户 ...
- matrix矩阵求逆 与解方程模板 留做备用 (有bug,待补充)
// // main.cpp // 矩阵求逆 // // Created by 唐 锐 on 13-6-20. // Copyright (c) 2013年 唐 锐. All rights reser ...
- flume的自定义sink-Kafka
1.创建一个agent,sink类型需指定为自定义sink vi /usr/local/flume/conf/agent3.conf agent3.sources=as1 ...
- 常用的MIME类型(资源的媒体类型)
后缀名 MIME名称 *.3gpp audio/3gpp, video/3gpp *.ac3 audio/ac3 *.asf allpication/vnd.ms-asf *.au audio/bas ...
- JS(五)
感觉JS里面还是有很多小技巧的,知道套路了,其实实现起来其实也还没有想象中的那么复杂.不过我觉得还是要把所学的知识融会贯通吧,不能学了JS就忘了前面的知识,结合起来才会威力无穷. 1.跑马灯:弹弹弹 ...