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!
 
 
 1 #include<cstdio>
 2 #include<cstring>
 3 #include<algorithm>
 4 using namespace std;
 5 const int maxn=35;
 6 long long sum[maxn];
 7 int n,w;
 8 struct node
 9 {
10     int t,v,l;
11     void input()
12     {
13         scanf("%d%d%d",&t,&v,&l);
14     }
15     friend bool operator<(node a,node b)
16     {
17         return a.l-a.t<b.l-b.t;
18     }
19 }q[maxn];
20 bool dfs(int p,int tot,long long va)
21 {
22     if(va>=w)   return 1;
23     if(p<0) return 0;
24     if(va+sum[p]<w) return 0;   //如果加上剩下的价值仍小于w
25     if(tot-q[p].l>=0&&tot-q[p].t>=0)    if(dfs(p-1,tot-q[p].t,va+q[p].v))   return 1;
26     if(dfs(p-1,tot,va)) return 1;
27     return 0;
28 }
29 int main()
30 {
31     #ifndef ONLINE_JUDGE
32     freopen("1.in","r",stdin);
33     #endif
34     int i,j,k;
35     while(scanf("%d%d",&n,&w)!=EOF)
36     {
37         for(i=0;i<n;i++)    q[i].input();
38         sort(q,q+n);
39         /*for(int i=0;i<n;i++)
40         {
41             printf("%d %d %d\n",q[i].t,q[i].v,q[i].l);
42         }*/
43         for(i=0;i<n;i++)
44         {
45             if(i==0)    sum[i]=q[i].v;
46             else sum[i]=sum[i-1]+q[i].v;
47         }
48         if(sum[n-1]<w)
49         {
50             printf("zhx is naive!\n");
51             continue;
52         }
53         int l=0,r=100000*n;  //最高用时
54         int ans;
55         while(l<=r)
56         {
57             int mid=(l+r)>>1;
58             if(dfs(n-1,mid,0))  r=mid-1,ans=mid;
59             else l=mid+1;
60         }
61         printf("%d\n",ans);
62     }
63 }
时间: 2024-11-06 00:04:21

hdu 5188 dfs+二分的相关文章

HDU 2295 DLX 二分

Radar Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 2229    Accepted Submission(s): 888 Problem Description N cities of the Java Kingdom need to be covered by radars for being in a state of w

Hdu 1045 二分匹配

题目链接 Fire Net Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 6282    Accepted Submission(s): 3551 Problem Description Suppose that we have a square city with straight streets. A map of a city i

hdu 4109 dfs+剪枝优化

求最久时间即在无环有向图里求最远路径 dfs+剪枝优化 从0节点(自己增加的)出发,0到1~n个节点之间的距离为1,mt[i]表示从0点到第i个节点目前所得的最长路径 #include<iostream> #include<cstdio> #include<cstring> #include<string> #include<algorithm> #include<vector> using namespace std; const

hdu 3641 数论 二分求符合条件的最小值数学杂题

http://acm.hdu.edu.cn/showproblem.php?pid=3641 学到: 1.二分求符合条件的最小值 /*==================================================== 二分查找符合条件的最小值 ======================================================*/ ll solve() { __int64 low = 0, high = INF, mid ; while(low <=

HDU 1015 dfs回溯

题目真长.....看了好长时间才看懂.. 就是给你一个32位数字和一个最多15个字符的字符串,从字符串中选出5个字符,若满足题中给的那个式子,输出字典序最大的那5个字符,若不满足,输出no solution. 为了解决字典序问题,在输入字符串后,把字符串按从大到小排一下序,搜索一下若满足条件输出即可. 贴代码. 1 #include <stdio.h> 2 #include <string.h> 3 #include <algorithm> 4 #include <

HDU 4768 Flyer (二分)

OJ题目:click here~~ 题目分析:n个[a  b] 区间,对于i 属于[a  b]  ,从a开始,间隔c ,即i = a , i = a + c , i = a + 2*c -- 将x[ i ] 加1 ,x[ i ] 初值为0 . 已知最多只有一个x[ i ] 为奇数.找到这个i , 和这个奇数. 由于最多只有一个奇数,且奇数 + 偶数 = 奇数.用二分夹逼出这个奇数的位置.找到这个位置,再计算这个奇数就很容易了. AC_CODE const int maxn = 20002; LL

hdu 1312 DFS算法简单题

题目连接:http://acm.hdu.edu.cn/showproblem.php?pid=1312 此题与油田那题很像是练习深搜的好题,题意是从"@"开始,遍历整个图,找到连接的 "."有多少个 但要考虑变化,简单处理下就行了,主要是斜角的不要了,而且判断结束方式也不一样 具体看代码吧 ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32

hdu 4400 离散化+二分+BFS(暴搜剪枝还超时的时候可以借鉴一下)

Mines Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total Submission(s): 1110    Accepted Submission(s): 280 Problem Description Terrorists put some mines in a crowded square recently. The police evacuate all peo

hdu 2962 Trucking (二分+最短路Spfa)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2962 Trucking Time Limit: 20000/10000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 1763    Accepted Submission(s): 618 Problem Description A certain local trucking co