hdu 5188 dfs+二分
get了很多新技能
当时想到了用dfs,但是排序用的是限制时间排序,一直没搞出来。
正解:
二分用时,dfs判断,为了顺利进行做题,需要按照做题开始时间排序
还可以用dp
题意:
作为史上最强的刷子之一,zhx常常参与各种比赛。
有一天,zhx去虐一场比赛。他觉得题太简单了。
这场比赛有n道题。他一眼就已经计算出他做第i道题要花ti的时间,做完后可以得到vi分。
因为他太强了,所以他被管理员盯上了。如果他在第li个单位时间前做完了第i道题,那么管理员就会认为他在作弊,然后把他的号封了。
zhx不一定把所有题都做完。他只需要拿到不少于w分就满足了。他让你告诉他他最小需要花费多少时间才能拿到足够的分数并且不被封号。或者说他根本不能拿到那么多分。
注意,zhx只能同时做一道题,而且他一旦开始做一道题,就非得把它做出来不可。然后他会在做完后立即提交代码。
1 3
1 4 7
3 6
4 1 8
6 8 10
1 5 2
2 7
10 4 1
10 2 3
7
8
zhx is naive!
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int maxn=;
long long sum[maxn];
int n,w;
struct node
{
int t,v,l;
void input()
{
scanf("%d%d%d",&t,&v,&l);
}
friend bool operator<(node a,node b)
{
return a.l-a.t<b.l-b.t;
}
}q[maxn];
bool dfs(int p,int tot,long long va)
{
if(va>=w) return ;
if(p<) return ;
if(va+sum[p]<w) return ; //如果加上剩下的价值仍小于w
if(tot-q[p].l>=&&tot-q[p].t>=) if(dfs(p-,tot-q[p].t,va+q[p].v)) return ;
if(dfs(p-,tot,va)) return ;
return ;
}
int main()
{
#ifndef ONLINE_JUDGE
freopen("1.in","r",stdin);
#endif
int i,j,k;
while(scanf("%d%d",&n,&w)!=EOF)
{
for(i=;i<n;i++) q[i].input();
sort(q,q+n);
/*for(int i=0;i<n;i++)
{
printf("%d %d %d\n",q[i].t,q[i].v,q[i].l);
}*/
for(i=;i<n;i++)
{
if(i==) sum[i]=q[i].v;
else sum[i]=sum[i-]+q[i].v;
}
if(sum[n-]<w)
{
printf("zhx is naive!\n");
continue;
}
int l=,r=*n; //最高用时
int ans;
while(l<=r)
{
int mid=(l+r)>>;
if(dfs(n-,mid,)) r=mid-,ans=mid;
else l=mid+;
}
printf("%d\n",ans);
}
}
hdu 5188 dfs+二分的更多相关文章
- uva 10004 Bicoloring(dfs二分染色,和hdu 4751代码差不多)
Description In the ``Four Color Map Theorem" was proven with the assistance of a computer. This ...
- HDU 5143 DFS
分别给出1,2,3,4 a, b, c,d个 问能否组成数个长度不小于3的等差数列. 首先数量存在大于3的可以直接拿掉,那么可以先判是否都是0或大于3的 然后直接DFS就行了,但是还是要注意先判合 ...
- Snacks HDU 5692 dfs序列+线段树
Snacks HDU 5692 dfs序列+线段树 题意 百度科技园内有n个零食机,零食机之间通过n−1条路相互连通.每个零食机都有一个值v,表示为小度熊提供零食的价值. 由于零食被频繁的消耗和补充, ...
- Java实现 LeetCode 655 输出二叉树(DFS+二分)
655. 输出二叉树 在一个 m*n 的二维字符串数组中输出二叉树,并遵守以下规则: 行数 m 应当等于给定二叉树的高度. 列数 n 应当总是奇数. 根节点的值(以字符串格式给出)应当放在可放置的第一 ...
- hdu 2413(最大匹配+二分)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2413 思路:由于要求最少的时间,可以考虑二分,然后就是满足在limit时间下,如果地球战舰数目比外星战 ...
- hdu 1281棋盘游戏(二分匹配)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1281 Problem Description 小希和Gardon在玩一个游戏:对一个N*M的棋盘, ...
- 10324 Global Warming dfs + 二分
时间限制:1000MS 内存限制:65535K提交次数:0 通过次数:0 题型: 编程题 语言: G++;GCC Description Global warming is a big prob ...
- HDU 5877 dfs+ 线段树(或+树状树组)
1.HDU 5877 Weak Pair 2.总结:有多种做法,这里写了dfs+线段树(或+树状树组),还可用主席树或平衡树,但还不会这两个 3.思路:利用dfs遍历子节点,同时对于每个子节点au, ...
- UVA 10816 + HDU 1839 Dijstra + 二分 (待研究)
UVA 题意:两个绿洲之间是沙漠,沙漠的温度不同,告诉起点,终点,求使得从起点到终点的最高温度最小的路径,如果有多条,输出长度最短的路径: 思路:用最小费用(最短路径)最大流(最小温度)也能搞吧,但因 ...
随机推荐
- GIT本地操作
01. GIT简介(PPT) ================================================================================ 02. ...
- PHP大批量插入数据库的3种方法和速度对比
第一种,使用insert into 插入,最后显示为:23:25:05 01:32:05 也就是花了2个小时多! $params = array(‘value'=>'50′); set_time ...
- mouseover和mouseout闪烁问题
在父级元素上注册了mouseover和mouseout事件后,当鼠标移动到子元素上时,会触发父级的mouseout和mouseover事件,反复触发,形成闪烁. 原因: 一种是由于冒泡,子级的mous ...
- python -os、sys
个人还不是很懂 os操作文件目录.sys针对系统环境的交互.大概是这样 使用os.system函数运行其他程序 os模块中的system()函数可以方便地运行其他程序或者脚本.其函数原型如下所示. o ...
- c#接口和抽象类对比学习
什么是接口? 接口就是一种规范,协议(*),约定好遵守某种规范就可以写通用的代码. 定义了一组具有各种功能的方法.接口描述的是一种能力,具有这种能力的事物可以没任何关系.比如: public inte ...
- LiLinux系统下如何修改主机名
1,用root用户登录,或者切换root用户,先查看当前的主机名:hostname (如果之前没有修改过,一般默认为localhost.localdomain): 2,vi /etc/sysconf ...
- 【转】 浅谈Radius协议
浅谈Radius协议 2013-12-03 16:06 5791人阅读 评论(0) 收藏 举报 分类: Radius协议分析(6) 从事Radius协议开发有段时间了,小弟不怕才疏学浅,卖弄一下, ...
- linux的设置ip连接crt,修改主机名,映射,建文件
1.修改IP(或者vim vi /etc/sysconfig/network-scripts/ifcfg-eth0) 2.连接 crt 3.修改主机名 用vim 编辑 /etc/sysconfig/n ...
- Linux命令sed
如果一个文本文件数据比较多,大概有40万条数据,我想取出第500-1000条数据,保存到另一个文件,用linux命令该如何操作? sed -n '500,1000p' 41w.txt > new ...
- 抓包工具 wireshark
http://fangxin.blog.51cto.com/1125131/735178