【2016-09-27-DP小练】
得分250。。我真是个250。。。
犯了一些很搞笑的错。。
f[i][j][k]表示第i个苹果,现在在j这个位置,还能用k次转移。
用i去更新i+1。
时间复杂度1000*2*30;
转移方程有个地方减一写错位了。。这么明显的错竟然没有看见。。50分TAT
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<iostream>
using namespace std; const int N=,M=;
int n,K,f[N][][M],t[N]; int maxx(int x,int y){return x>y ? x:y;}
void g(int &x,int y){x=maxx(x,y);} int main()
{
// freopen("a.in","r",stdin);
freopen("bcatch.in","r",stdin);
freopen("bcatch.out","w",stdout);
scanf("%d%d",&n,&K);
for(int i=;i<=n;i++) scanf("%d",&t[i]),t[i]--;
memset(f,-,sizeof(f));
f[][][K]=;
for(int i=;i<n;i++)
{
int now=t[i+];
for(int k=;k<=K;k++)
{
g(f[i+][now][k],f[i][now][k]+);
if(k>=) g(f[i+][now][k-],f[i][-now][k]+);
g(f[i+][-now][k],f[i][-now][k]);
if(k>=) g(f[i+][-now][k-],f[i][-now][k]);
}
}
int ans=;
for(int k=;k<=K;k++) ans=maxx(ans,maxx(f[n][][k],f[n][][k]));
printf("%d\n",ans);
return ;
}
T1
f[i][j]表示当前时间为i,能力值为j时的最大滑雪次数。
预处理:给课程先排一次序;p[i]表示能力值为i时滑一次雪最少要多久。
然后就是要不去上课;要不去滑雪。
时间复杂度10^4*100。
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std; const int N=;
struct node{
int c,d;
}a[N];
struct nod{
int m,l,A;
}b[N];
int n,s,t,p[N],f[][],mx[N]; // bool cmp1(node x,node y)
// {
// if(x.c==y.c) return x.d<y.d;
// return x.c<y.c;
// } bool cmp2(nod x,nod y){return x.m<y.m;}
int maxx(int x,int y){return x>y ? x:y;}
int minn(int x,int y){return x<y ? x:y;}
void g(int &x,int y){x=maxx(x,y);} int main()
{
// freopen("a.in","r",stdin);
freopen("ski.in","r",stdin);
freopen("ski.out","w",stdout);
scanf("%d%d%d",&t,&s,&n);
memset(p,,sizeof(p));
for(int i=;i<=s;i++)
{
scanf("%d%d%d",&b[i].m,&b[i].l,&b[i].A);
}
for(int i=;i<=n;i++)
{
scanf("%d%d",&a[i].c,&a[i].d);
p[a[i].c]=minn(p[a[i].c],a[i].d);
}
for(int i=;i<=;i++) p[i]=minn(p[i],p[i-]);
// sort(a+1,a+1+n,cmp1);
sort(b+,b++s,cmp2);
b[s+].m=;
int ind=,ans=;
memset(f,-,sizeof(f));
memset(mx,-,sizeof(mx));
f[][]=;
for(int i=;i<=t;i++)
for(int j=;j<=;j++)
{
g(f[i][j],mx[j]);
while(b[ind].m<i && ind<=s) ind++;
if(b[ind].m==i) g(f[i+b[ind].l][b[ind].A],f[i][j]);
g(f[i+p[j]][j],f[i][j]+);
g(mx[j],f[i][j]);
if(i==t) ans=maxx(ans,f[i][j]);
}
printf("%d\n",ans);
return ;
}
T2
这题是我被卡住的一题。。因为我一直在想它为了达到后面的限制,前面可能要特意往下走一点。。
一出来发现自己好搞笑。。
首先我们从后往前预处理一遍,s[i]=minn(s[i],s[i+1]+dis(i~i+1)),这样就保证了满足当前的限制,以后的限制就一定有办法达到!
然后就是一个贪心了。
对于当前的v,下一个限制s[i+1],它们之间的速度差k=s[i+1]-v,距离d=dis(i~i+1)
设加速x秒,减速y秒。
x+y=d
x - y=k
所以最高速度x=(d+k)/2;
ans取max。
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std; const int N=;
int l,n,pl,t[N],s[N];
struct node{
int t,s;
}a[N]; bool cmp(node x,node y){return x.t<y.t;}
int maxx(int x,int y){return x>y ? x:y;}
int minn(int x,int y){return x<y ? x:y;} int main()
{
// freopen("a.in","r",stdin);
freopen("bobsled.in","r",stdin);
freopen("bobsled.out","w",stdout);
scanf("%d%d",&l,&n);
pl=;t[]=;
for(int i=;i<=n;i++) scanf("%d%d",&a[i].t,&a[i].s);
sort(a+,a++n,cmp);
for(int i=n;i>=;i--)
{
int d=a[i].t-a[i-].t;
a[i-].s=minn(a[i-].s,a[i].s+d);
}
int v=,ans=;
for(int i=;i<=n;i++)
{
int d=a[i].t-a[i-].t;
if(v+d<=a[i].s) v=v+d,ans=maxx(ans,v);
else
{
int k=a[i].s-v;
ans=maxx(ans,v+(d+k)/);
v=a[i].s;
}
// printf("v = %d\n",v);
}
ans=maxx(ans,v+l-a[n].t);
printf("%d\n",ans);
return ;
}
T3
f[i][j]表示当前扫到第i只奶牛,余数是j。
转移方程就直接看把。。
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std; const int N=,M=,Mod=(int)1e8;
int n,m,f[N][M],a[N]; int maxx(int x,int y){return x>y ? x:y;}
void g(int &x,int y){x=(x+y)%Mod;} int main()
{
// freopen("a.in","r",stdin);
freopen("fristeam.in","r",stdin);
freopen("fristeam.out","w",stdout);
scanf("%d%d",&n,&m);
for(int i=;i<=n;i++) scanf("%d",&a[i]);
memset(f,,sizeof(f));
f[][]=;
for(int i=;i<=n;i++)
{
for(int j=;j<=m;j++)
{
g(f[i+][(j+a[i+])%m],f[i][j]);
g(f[i+][j],f[i][j]);
// printf("f [ %d ] [ %d ] = %d\n",i,j,f[i][j]);
}
}
printf("%d\n",f[n][]-);
return ;
}
T4
【2016-09-27-DP小练】的更多相关文章
- 数位dp小练
最近刷题的同时还得填填坑,说来你们也不信,我还不会数位dp. 照例推几篇博客: 数位DP讲解 数位dp 的简单入门 这两篇博客讲的都很好,不过代码推荐记搜的形式,不仅易于理解,还短. 数位dp的式子一 ...
- 【树形dp小练】HDU1520 HDU2196 HDU1561 HDU3534
[树形dp]就是在树上做的一些dp之类的递推,由于一般须要递归处理.因此平庸情况的处理可能须要理清思路.昨晚開始切了4题,作为入门训练.题目都很easy.可是似乎做起来都还口以- hdu1520 An ...
- 2016/09/27 Hadoop Yarn
1.1 YARN基本架构 YARN是Hadoop2.0中的资源管理系统,它的基本设计思想是将MRv1中的JobTracker拆分成了两个独立的服务:一个全局的资源管理器ResourceMana ...
- 2016年中国微信小程序专题研究报告
2016年12月29日,全球领先的移动互联网第三方数据挖掘和分析机构iiMedia Research(艾媒咨询)权威首发<2016年中国微信小程序专题研究报告>. 报告显示,82.6%手机 ...
- 2016.09.14,英语,《Using English at Work》全书笔记
半个月时间,听完了ESLPod出品的<Using English at Work>,笔记和自己听的时候的备注列在下面.准备把每个语音里的快速阅读部分截取出来,放在手机里反复听. 下一阶段把 ...
- js 计时器小练-20160601
今天要做一个计时器小练,所以我就做了练习,代码如下. // 初始化时间,以及定义全局量去接收计时器 var timer = 0; var t; var h, min, sec, millisec; / ...
- 10-19 dp专练
dp专练,终于克服了一次自己对dp的恐惧,磕出来一道题. 得分情况: T1:0 T2:0 T3:0 emmmm,磕出来的题是T2,但是因为初始化和int long long的原因爆零了 T1:n只狼排 ...
- Django 09 博客小案例
Django 09 博客小案例 urls.py from django.urls import path from . import views urlpatterns = [ path('index ...
- [BZOJ 4455] [ZJOI 2016] 小星星 (树形dp+容斥原理+状态压缩)
[BZOJ 4455] [ZJOI 2016] 小星星 (树形dp+容斥原理+状态压缩) 题面 给出一棵树和一个图,点数均为n,问有多少种方法把树的节点标号,使得对于树上的任意两个节点u,v,若树上u ...
- 算法小练#1 - Dany Yang
开始记录每周做过的算法题,这是第一周,新的开始 1021. 删除最外层的括号 题目要求如下: 有效括号字符串为空 ("")."(" + A + ")& ...
随机推荐
- Kotlin 1 函数
#2 函数 函数声明和平时我见到的有点不太一样,使用关键字fun来声明.(感觉好欢乐的样子···O(∩_∩)O~~) 下面的示例,简单的声明了一个函数: // 这是函数声明 fun this_is_a ...
- 关于相对布局RelativeLayout的各种属性介绍
RelativeLayout相对布局是个人觉得在android布局中比较常用且好用的一个,当然如果想让布局更漂亮是需要多种布局混合搭建的,这里就需要更深入的学习了,在这只介绍下有关相对布局的东西. 相 ...
- [转][赞]Android开发者必知的开发资源
英文原文:Bongzimo 翻译: ImportNew-黄小非 随着Android平台市场份额的持续猛增 ,越来越多的开发者开始投入Android应用程序的开发大潮.如果您是一位2013年刚刚入行的 ...
- Jmeter学习(三)
Apache JMeter是Apache组织开发的基于Java的压力测试工具.用于对软件做压力测试,它最初被设计用于Web应用测试,但后来扩展到其他测试.(来自百度) jmeter的特点: 开源免费. ...
- Python 3基础教程22-单个列表操作
本文来介绍列表的操作,先看看单个列表的操作,列表有多个方法.以下多行代码,建议你写一个方法,测试运行一个方法,不然看起来很乱. # 元组操作 x = [5,6,2,1,6,7,2,7,9] # app ...
- Python网络编程(socketserver、TFTP云盘、HTTPServer服务器模型)
HTTP协议? HTTP是一个应用层协议,由请求和响应构成,是一个标准的客户端服务器模型.HTTP是一个无状态的协议. 通常承载于TCP协议之上,有时也承载于TLS或SSL协议层之上,这个时候,就成了 ...
- CSP201312-1:出现次数最多的数
引言:CSP(http://www.cspro.org/lead/application/ccf/login.jsp)是由中国计算机学会(CCF)发起的“计算机职业资格认证”考试,针对计算机软件开发. ...
- 九度OJ--1167(C++)
#include <iostream>#include <algorithm>#include <map> using namespace std; int mai ...
- iOS-Hello World
尝试练习一些简单的app,能快速上手开发环境和开发流程.基础Start Developing iOS Apps (Swift)https://developer.apple.com/library/c ...
- 二分图的最大匹配——Hopcroft-Karp算法
http://blog.csdn.net/wall_f/article/details/8248373