hdu 4883
来源:互联网 发布:淘宝确认收货几天 编辑:程序博客网 时间:2024/05/25 23:58
好吧,这题做法应该比我的好,好的做法是根据开始的时间排序。
然后开始遍历时间,遇到一个开始的时间,就加上当前的值,遇到结束的时候就减去这个值,在这个过程中的最大值就是题目的解。
自己的做法是看状态总共也就24*60种,就自己找到开始时间和结束时间,在这个期间的每个时刻加上当前值,然后找出值最大的时刻。
#include "stdio.h"#include "string.h"#include "math.h"#include <string>#include <queue>#include <stack>#include <vector>#include <map>#include <algorithm>#include <iostream>using namespace std;#define MAX 1#define max(a,b) a > b ? a : b#define min(a,b) a < b ? a : b#define abs(a) a < 0 ? a : (-a)#define Mem(a,b) memset(a,b,sizeof(a))int Mod = 1000000007;double pi = acos(-1.0);double eps = 1e-6;typedef struct{int f,t,w,next;}Edge;Edge edge[MAX];int head[MAX];int kNum;int T,n;int dp[1500];char s1[10], s2[10];void addEdge(int f, int t, int w){edge[kNum].f = f;edge[kNum].t = t;edge[kNum].w = w;edge[kNum].next = head[f];head[f] = kNum ++;}void handle(int val){int s = 0, t = 0, v = 0;for(int i = 0; s1[i] != 0; i ++){if( s1[i] == ':' ){s = v;v = 0;continue;}v = v * 10 + ( s1[i] - '0' );}s = s * 60 + v;v = 0;for(int i = 0; s2[i] != 0; i ++){if( s2[i] == ':' ){t = v;v = 0;continue;}v = v * 10 + ( s2[i] - '0' );}t = t * 60 + v;for(int i = s; i < t; i ++){dp[i] += val;}}void solve(){Mem(dp, 0);int val;for(int i = 0; i < n; i ++){scanf("%d %s %s",&val, s1, s2);handle(val);}int ans = dp[0];for(int i = 0; i < 24 * 60; i ++){if( ans < dp[i] )ans = dp[i];}printf("%d\n",ans);}int main(){//freopen("d:\\test.txt", "r", stdin);while(cin>>T){while( T-- ){cin>>n;solve();}}return 0;}
0 0
- hdu 4883
- hdu 4883
- hdu 4883
- hdu 4883
- hdu 4883 区间选点
- hdu
- hdu
- HDU
- hdu ()
- hdu
- hdu
- HDU
- HDU
- hdu
- hdu
- HDU
- Hdu
- hdu
- python学习第1天-隐藏的彩蛋
- ubuntu 下配置自己的svn server
- VC 所有的窗口样式
- UIViewContentMode解释
- 感光灯
- hdu 4883
- HDOJ 2058 The sum problem(数学求和问题)
- 使用libsvm进行分类之python和java版本
- 在串口通讯器中输入三个数字,亮起RGB彩灯
- Python基础:08列表解析与生成器表达式
- 山寨电信机房、模仿走线分格,机房,Wifi覆盖、POE监控
- 舵机
- 物联网领域几个协议的比较(来自于open mobile Allionce)
- aduino,超声波