J - FatMouse's Speed dp
题目链接: 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的更多相关文章
- J - FatMouse's Speed
p的思路不一定要到最后去找到ans:也可以设置成在中间找到ans:比如J - FatMouse's Speed 这个题,如果要是让dp[n]成为最终答案的话,即到了i,最差的情况也是dp[i-1],就 ...
- HDU 1160 FatMouse's Speed (DP)
FatMouse's Speed Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u Su ...
- HDU1160 FatMouse's Speed —— DP
题目链接:http://acm.split.hdu.edu.cn/showproblem.php?pid=1160 FatMouse's Speed Time Limit: 2000/1000 MS ...
- FatMouse's Speed
J - FatMouse's Speed DP的题写得多了慢慢也有了思路,虽然也还只是很简单的DP. 因为需要输出所有选择的老鼠,所以刚开始的时候想利用状态压缩来储存所选择的老鼠,后面才发现n太大1& ...
- FatMouse's Speed——J
J. FatMouse's Speed FatMouse believes that the fatter a mouse is, the faster it runs. To disprove th ...
- FatMouse's Speed 基础DP
FatMouse's Speed Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) ...
- zoj 1108 FatMouse's Speed 基础dp
FatMouse's Speed Time Limit: 2 Seconds Memory Limit:65536 KB Special Judge FatMouse believe ...
- zoj 1108 FatMouse's Speed 基础dp
FatMouse's Speed Time Limit: 2 Seconds Memory Limit:65536 KB Special Judge FatMouse believe ...
- HDU 1160 FatMouse's Speed(DP)
题意 输入n个老鼠的体重和速度 从里面找出最长的序列 是的重量递增时速度递减 简单的DP 令d[i]表示以第i个老鼠为所求序列最后一个时序列的长度 对与每一个老鼠i 遍历全部老鼠j 当 ...
随机推荐
- Notes of Daily Scrum Meeting(12.18)
前期落下的进度我们会在周六周日赶一下,在编译课程设计中期测试之后集中处理项目中的问题. 今天的任务总结如下: 团队成员 今日团队工作 陈少杰 调试后端连接的部分,寻找bug 王迪 测试搜索功能,修改b ...
- Linux内核分析第一周总结
冯诺依曼体系结构 储存程序计算机工作模型 硬件 程序员 CPU当作for循环: IP: 16位计算机:IP 32位计算机:eIP 64位计算机:rIP X86汇编基础 X86的CPU寄存器 X86的C ...
- Java 笔记——MyBatis 生命周期
1.MyBatis 的生命周期 MyBatis的核心组件分为4个部分. SqlSessionFactoryBuilder (构造器): 它会根据配置或者代码来生成SqISessionFactory,采 ...
- 关于断言(Assert)
断言,字面上的意思大致是十分肯定的说,也就是说我们相信这个结果是真的.如果我们的断言不为真,那这个这个结果就和我们预期的结果不一样.在编程上同理,如果程序运行出来的结果和你想要的结果不一致,那你的程序 ...
- 弟三周作业之VS2015
这周有个任务就是安装VS2015,然后进行简单的单元测试. 首先我上吴小勇同学给的MSDN官网(http://www.itellyou.cn/)下载VS2013, 然后装上后,在工具栏里,点击工具里的 ...
- Mysql设置允许外网访问(图文)
1.打开mysql.exe(MySQL Command Line Client),输入密码 2.输入:use mysql; 3.查询host输入: select user,host from user ...
- ipmitool+python应用处理大量带外地址
ipmitool 是一种可用在 linux 系统下的命令行方式的 ipmi 平台管理工具,它支持 ipmi 1.5 规范(最新的规范为 ipmi 2.0),通过它可以实现获取传感器的信息.显示系统日志 ...
- Installing OpenSSH from the Settings UI on Windows Server 2019 or Windows 10 1809
Installing OpenSSH from the Settings UI on Windows Server 2019 or Windows 10 1809 OpenSSH client and ...
- final 发布 领跑衫获奖感想
时间 :2016年5月20日 13:30--14:00 final发布中,我们团队严一格演示了最终版本的四则运算项目, 修正了beta版本发布时弹幕部分无法消除的bug,总体效果达到预期. 遗憾的是没 ...
- JavaWeb开发之详解Servlet及Servlet容器
自JavaEE诞生伊始,Servlet容器和Servlet技术,就构成了JavaEE应用的核心,配合其它组件,它们完善了Java企业级开发的全套解决方案.小到一个静态博客网站,大到分布式的集群应用,都 ...