题目链接: https://vjudge.net/contest/68966#problem/J

找最长子串并且记录路径。

TLE代码:

#include<iostream>
#include<string>
#include<algorithm>
#include<cstring>
#include<stdio.h>
using namespace std;
# define inf 0x3f3f3f3f
# define maxn 200000+10
int dp[maxn];
int road[maxn];
int a[maxn];
struct node
{
int we;
int sp;
int num;
} q[maxn];
bool cmp(node t1,node t2)
{
if(t1.sp!=t2.sp)return t1.sp>t2.sp;
if(t1.sp==t2.sp&&t1.we!=t2.we)return t1.we>t2.we;
return false;
}
int main()
{
int t=1;
while(~scanf("%d%d",&q[t].we,&q[t].sp))
{
q[t].num=t;
t++;
}
t--;
sort(q+1,q+t+1,cmp);
memset(dp,0,sizeof(dp));
memset(road,0,sizeof(road));
dp[1]=1;
road[1]=q[1].num;
for(int i=2; i<=t; i++)
{
int maxx=0;
int po=0;
for(int j=i-1; j>=1; j--)
{
if(q[i].we>q[j].we&&q[i].sp<q[j].sp&&maxx<dp[j])
{
maxx=dp[j];
po=q[j].num;
}
}
road[i]=po;
dp[i]=maxx+1;
}
int po=0;
int maxx=0;
for(int i=1; i<=t; i++)
{
if(dp[i]>maxx)
{
maxx=dp[i];
po=i;
}
}
int ans=0;
printf("%d\n",maxx);
int j=po;
while(1)//在这个地方超时,其实可以通过递归来实现
{
for(int i=1; i<=t; i++)
{
if(q[i].num==j)
{
a[++ans]=j;
j=road[i];
}
}
if(ans==maxx)break;
}
for(int i=ans; i>=1; i--)
printf("%d\n",a[i]);
return 0;
}

AC代码;

#include<iostream>
#include<string>
#include<cstring>
#include<iomanip>
#include<cmath>
#include<algorithm>
#include<stdio.h>
using namespace std;
# define inf 0x3f3f3f3f
# define ll long long
# define maxn 1000+10
struct node
{
int num;
int we;
int sp;
} q[maxn];
int dp[maxn];
int road[maxn];
bool cmp(node t1,node t2)
{
if(t1.sp!=t2.sp)return t1.sp>t2.sp;
if(t1.sp==t2.sp&&t1.we!=t2.we)return t1.we<t2.we;
return false;
}
void print(int k)
{
if(k==0)return ;
print(road[k]);
printf("%d\n",q[k].num);
}
int main()
{
int t=1;
while(~scanf("%d%d",&q[t].we,&q[t].sp))
{
q[t].num=t;
t++;
}
t--;
sort(q+1,q+1+t,cmp);
memset(dp,0,sizeof(dp));
memset(road,0,sizeof(road));
road[1]=0;
dp[1]=1;
for(int i=2; i<=t; i++)
{
int maxx=0;
int po=0;
for(int j=i-1; j>=1; j--)
{
if(q[i].we>q[j].we&&q[i].sp<q[j].sp&&maxx<dp[j])
{
maxx=dp[j];
po=j;//与超时的代码相比,原来存储的是第j个的编号,而如果直接存储排完序后的编号的话,到时候倒着输出就可以了。
}
}
dp[i]=maxx+1;
road[i]=po;
}
int maxx=0;
int po=0;
for(int i=1; i<=t; i++)
{
if(dp[i]>maxx)
{
maxx=dp[i];
po=i;
}
}
printf("%d\n",maxx);
print(po);
return 0;
}

J - FatMouse's Speed dp的更多相关文章

  1. J - FatMouse's Speed

    p的思路不一定要到最后去找到ans:也可以设置成在中间找到ans:比如J - FatMouse's Speed 这个题,如果要是让dp[n]成为最终答案的话,即到了i,最差的情况也是dp[i-1],就 ...

  2. HDU 1160 FatMouse's Speed (DP)

    FatMouse's Speed Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u Su ...

  3. HDU1160 FatMouse's Speed —— DP

    题目链接:http://acm.split.hdu.edu.cn/showproblem.php?pid=1160 FatMouse's Speed Time Limit: 2000/1000 MS ...

  4. FatMouse's Speed

    J - FatMouse's Speed DP的题写得多了慢慢也有了思路,虽然也还只是很简单的DP. 因为需要输出所有选择的老鼠,所以刚开始的时候想利用状态压缩来储存所选择的老鼠,后面才发现n太大1& ...

  5. FatMouse's Speed——J

    J. FatMouse's Speed FatMouse believes that the fatter a mouse is, the faster it runs. To disprove th ...

  6. FatMouse's Speed 基础DP

    FatMouse's Speed Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) ...

  7. zoj 1108 FatMouse's Speed 基础dp

    FatMouse's Speed Time Limit: 2 Seconds      Memory Limit:65536 KB     Special Judge FatMouse believe ...

  8. zoj 1108 FatMouse's Speed 基础dp

    FatMouse's Speed Time Limit: 2 Seconds      Memory Limit:65536 KB     Special Judge FatMouse believe ...

  9. HDU 1160 FatMouse&#39;s Speed(DP)

    题意  输入n个老鼠的体重和速度   从里面找出最长的序列  是的重量递增时速度递减 简单的DP  令d[i]表示以第i个老鼠为所求序列最后一个时序列的长度  对与每一个老鼠i  遍历全部老鼠j  当 ...

随机推荐

  1. 2-Nineteenth Scrum Meeting-20151219

    任务安排 成员 今日完成 明日任务 闫昊 写完学习进度记录的数据库操作 请假(数据库) 唐彬 和服务器老师交流讨论区后台接口 请假(数据库) 史烨轩  尝试使用downloadmanager对noti ...

  2. 【Alpha】第九次Scrum meeting

    今日任务一览: 姓名 今日完成任务 所耗时间 刘乾 由于发现之前版本的模板引擎存在致命bug,所以重新更换,现在使用jinja2作为模板渲染引擎. 3 鲁聃 卤蛋今天为了给编译老师做视频,没有做软工项 ...

  3. pdf修复

    pdf工具下载地址: 链接:https://pan.baidu.com/s/1SgGSrH7apX64hQEl732wWg 提取码:kg5q 使用说明: 1.含注册命令,先注册再运行.

  4. (Alpha)Let's-Chronos分数分配规则

    Requirement: 每个团队开一个讨论会,协商讨论团队贡献分的分配方式.每个团队的团队贡献分为50分/人.每个人分数不能相同,请详细说明分数的分配规则. 为了完成此次的团队贡献分的分配任务,我们 ...

  5. JS开发之CommonJs和AMD/CMD规范

    CommonJS是主要为了JS在后端的表现制定的,他是不适合前端的,AMD(异步模块定义)出现了,它就主要为前端JS的表现制定规范. 在兼容CommonJS的系统中,你可以使用JavaScript开发 ...

  6. nodejs的事件驱动理解

    // 引入 events 模块 var events = require('events'); // 创建 eventEmitter 对象 var eventEmitter = new events. ...

  7. Node.js使用UDP通讯

    Node.js 的 dgram 模块可以方便的创建udp服务,,以下是使用 dgram模块创建的udp服务和客户端的一个简单例子. 一.创建 UDP Server var dgram = requir ...

  8. PowerExchange实时抽取架构介绍

    工作原理 准实时抽取架构图: 以上共有核心业务系统数据库服务器.ETL服务器.BI数据库服务器[目标数据库服务器],三台服务器和ETL客户端(PowerCenter客户端).其中核心业务系统上有核心系 ...

  9. BZOJ2753 SCOI2012滑雪与时间胶囊(最小生成树)

    首先显然可以把所有能到的点拎出来建个新图,这样第一问也就做好了. 剩下的部分似乎是一个裸的最小树形图.但显然这个东西是没什么学的必要的并且不太能跑过去. 考虑建出来的图有什么性质.可以发现如果没有高度 ...

  10. 洛谷P3613 睡觉困难综合征(LCT,贪心)

    洛谷题目传送门 膜拜神犇出题人管理员!!膜拜yler和ZSY!! 没错yler连续教我这个蒟蒻写起床困难综合症和睡觉困难综合症%%%Orz,所以按位贪心的思路可以继承下来 这里最好还是写树剖吧,不过我 ...