P2948 [USACO09OPEN]滑雪课Ski Lessons
2024-08-28 15:26:06
题意:Bessie去滑雪,限时T,滑雪场有S节课
每节课开始于$m_i$,长度为$l_i$,可以将Bessie的能力值变成$a_i$(注意是变成不是增加)
有n个滑雪坡,去滑雪需要$c_i$的能力,并且耗时$d_i$
问Bessie最多能滑几次雪
一看这么多变量,很显然就是DP啦(只是不会而已)
变量:时间,课程,坡,能力,次数(额,咋设状态呢。。。。)
#include<cstdio>
#include<iostream>
#include<cstring>
#include<cctype>
#include<algorithm>
using namespace std;
#define int long long
#define olinr return
#define _ 0
#define love_nmr 0
#define DB double
inline int read()
{
int x=,f=;
char ch=getchar();
while(!isdigit(ch))
{
if(ch=='-')
f=-f;
ch=getchar();
}
while(isdigit(ch))
{
x=(x<<)+(x<<)+(ch^);
ch=getchar();
}
return x*f;
}
inline void put(int x)
{
if(x<)
{
x=-x;
putchar('-');
}
if(x>)
put(x/);
putchar(x%+'');
}
int t;
int s;
int n;
int f[][]; //f[i][j]表示到i时刻,能力值为j的最多滑雪次数
int ks[][]; //ks[i][j]表示在i时刻结束,获得j能力的课程的最晚开始时间
int g[]; //g[i]表示到i时刻的最多滑雪次数
int st[]; //st[i]表示能力值>=i的最短滑雪时间
signed main()
{
t=read();
s=read();
n=read();
for(int a,b,c,i=;i<=s;i++) //预处理ks
{
a=read();
b=read();
c=read();
ks[a+b-][c]=max(ks[a+b-][c],a);
}
memset(st,0x3f,sizeof st);
for(int a,b,i=;i<=n;i++) //预处理st
{
a=read();
b=read();
for(int j=;j>=a;j--)
st[j]=min(st[j],b);
}
memset(f,-0x3f,sizeof f); //初始值
f[][]=g[]=; //初始能力为1
for(int i=;i<=t;i++)
for(int j=;j<=;j++)
{
f[i][j]=f[i-][j]; //啥也不干QAQ
if(ks[i-][j]) f[i][j]=max(f[i][j],g[ks[i-][j]]); //表示在前一分钟刚刚上完课,niubi了
if(i-st[j]>=) f[i][j]=max(f[i][j],f[i-st[j]][j]+); //去滑雪
g[i]=max(g[i],f[i][j]); //每次更新
}
put(g[t]);
olinr ~~(^_^)+love_nmr;
}
最新文章
- C++智能指针详解
- 分享我的开源项目-springmore
- C#中dynamic的正确用法
- c#修改config中的AppSettings属性
- 使用Git上传本地项目代码到github
- VMware Workstation 10安装Centos6.4操作步骤说明
- 启动tomcat时报classpath not found
- SQL常用语句,随时用随时更新
- HTTPS 原理浅析及其在 Android 中的使用
- jquery easyui datagrid 如何第一次点击列标题时是降序排列
- Python的ctypes 和pyinstaller
- 内存管理-slab[代码]
- Linux command stty
- excel怎样添加的选项卡中含有下拉列表
- python gpio
- ubuntu安装conda
- mac下docker中安装nodejs
- inline-block和float的区别,什么时候使用
- 理解 JavaScript 原型 / 原型链
- MySQL innodb表使用表空间物理文件复制或迁移表