我不想写背景
来源:互联网 发布:手机在哪里看网络制式 编辑:程序博客网 时间:2024/04/29 08:21
我不想写背景
题目描述
某巨魔去滑雪(没滑雪板),但他的技术并不精湛,在滑雪场里,每天会提供
第
上完第
巨魔买了一张地图,地图上显示了
巨魔的能力必须大于等于这个等级,以使得他能够安全滑下。
巨魔可以用他的时间来滑雪,上课,或者在旁边菊花丛中练习箭法,但是他必须在
这意味着他必须在
求巨魔在时间内最多可以完成多少次滑雪。
这一天开始的时候,他的滑雪能力为
输入格式
第一行
接下来
接下来
输出格式
一个整数,表示巨魔滑雪的最大次数。
样例输入
10 1 2
3 2 5
4 1
1 3
样例输出
6
样例解释
0时刻,选择在第1个斜坡上滑雪,时间花费3。
3时刻,选择上第1节课。滑雪技术提高到5,时间花费2。
5时刻,选择在第2个斜坡上滑雪,时间花费1。
6时刻,选择在第2个斜坡上滑雪,时间花费1。
7时刻,选择在第2个斜坡上滑雪,时间花费1。
8时刻,选择在第2个斜坡上滑雪,时间花费1。
9时刻,选择在第2个斜坡上滑雪,时间花费1。
10时刻,收队了。
总滑雪次数:6
数据范围
Solution
设
转移方程就很容易推了。
Code
#include <iostream>#include <cstdio>#include <algorithm>#include <queue>using namespace std;int oo=(2147483647);struct answer{ int i,j,k; answer(int a,int b,int c){ i=a; j=b; k=c; } bool operator > (const answer num)const{ if(i!=num.i)return i>num.i; if(j!=num.j)return j>num.j; if(k!=num.k)return k>num.k; }};struct object{ int l,t,v; object(){ l=t=v=oo; }};struct snow{ int c,d; snow(){ c=d=oo; }};inline int Max(int a,int b){ return a>b?a:b;}inline int in(){ char ch; int x=0,flag=1; ch=getchar(); while((ch>'9'||ch<'0')&&ch!='-')ch=getchar(); if(ch=='-'){flag=-1;ch=getchar();} while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();} return x;}int t,s,n,rn,ans;int maxn;object o[10010];snow w[10010];priority_queue<answer,vector<answer>,greater<answer> >S;bool cmp(object a,object b){ return a.l<b.l;}bool cmp2(snow a,snow b){ return a.c<b.c; }void prework(){ scanf("%d%d%d",&t,&s,&n); rn=n; for(int i=1;i<=s;i++){ int x,y,z; scanf("%d%d%d",&x,&y,&z); if(x+y<=t){ o[i].l=x; o[i].t=y; o[i].v=z; maxn=Max(maxn,o[i].v); } else o[i].l=oo; } for(int i=1;i<=n;i++){ scanf("%d%d",&w[i].c,&w[i].d); if(w[i].c>maxn){w[i].c=oo;rn--;} } for(int i=1;i<n;i++) for(int j=i+1;j<=n;j++)if(w[j].c!=oo&&w[i].c!=oo){ if(w[i].c<=w[j].c&&w[i].d<=w[j].d){w[j].c=oo;rn--;} if(w[i].c>=w[j].c&&w[i].d>=w[j].d){w[i].c=oo;rn--;} } for(int i=0;i<=t;i++) S.push(answer(i,1,0)); sort(o+1,o+s+1,cmp); sort(w+1,w+n+1,cmp2);}void mainwork(){ int now=1; while(!S.empty()){ answer nos=S.top(); S.pop(); while(!S.empty()&&nos.i==(S.top()).i&&nos.j==(S.top()).j){ nos.k=(S.top()).k; S.pop(); } while(o[now].l==nos.i){ if(o[now].v>nos.j) S.push(answer(nos.i+o[now].t,o[now].v,nos.k)); now++; } for(int k=1;k<=rn;k++){ if(w[k].c>nos.j)break; if(nos.i+w[k].d<=t) S.push(answer(nos.i+w[k].d,nos.j,nos.k+1)); } if(ans<nos.k)ans=nos.k; }}void endwork(){ printf("%d",ans);}int main(){ freopen("wtf.in","r",stdin); freopen("wtf.out","w",stdout); prework(); mainwork(); endwork(); return 0;}
- 我不想写背景
- 我真不想写背景
- 我真的不想写背景
- 我已经不想写算法了
- 我----不想
- 我不想
- 我不想
- 【生活】我不想我不想不想上班
- 2011.11.26-12.10 我不想写总结,我想说说她。
- 什么都不想写
- 不想写啊
- 不想写博客
- 我不想去
- 我不想戒烟了
- 我不想做木偶
- 我不想长大
- 我也不想这样
- 我不想做菜鸟
- LeetCode 104. Maximum Depth of Binary Tree
- android设计模式之单例模式
- android用wifi进行adb调试
- NSPredicate
- c++ std vector用法介绍
- 我不想写背景
- tyvj P1864 [Poetize I]守卫者的挑战
- js自定义事件及事件交互原理概述(二)
- Leetcode练习笔记——169. Majority Element
- 每天一个Linux命令(1):ls命令
- 操练
- 【Android 应用开发】Android 开发环境下载地址
- 个人记录
- 【Top-k问题】如何从海量数据中找出前k大数