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 当 ...
随机推荐
- 互联网寒冬,Python 程序员如何准备面试
虽说年年都在喊互联网寒冬,最难就业季,但是今年确实有点不一样,年前年后一波又一波互联网公司宣布『人员调整,结构优化』, 这是往年没发生过的. 是不是面试机会就少了很多呢?不是的. 搜索招聘网站我们可以 ...
- CocoaPods 遇到 A host target is a "parent" target which embeds a "child" target 问题解决
正在开发的项目中,集成RN,在使用cocoapods 时候,pod install 遇到如下问题: [!] Unable to find host target(s) for ****Extensio ...
- Daily Scrumming* 2015.12.15(Day 7)
一.团队scrum meeting照片 二.成员工作总结 姓名 任务ID 迁入记录 江昊 任务1036 https://github.com/buaaclubs-team/temp-front/com ...
- 【Alpha】第九次Scrum meeting
今日任务一览: 姓名 今日完成任务 所耗时间 刘乾 由于发现之前版本的模板引擎存在致命bug,所以重新更换,现在使用jinja2作为模板渲染引擎. 3 鲁聃 卤蛋今天为了给编译老师做视频,没有做软工项 ...
- Linux内核设计(第一周)——从汇编语言出发理解计算机工作原理
Linux内核设计(第一周)——从汇编语言出发理解计算机工作原理 计算机工作原理 汇编指令 C语言代码汇编分析 by苏正生 原创作品转载请注明出处 <Linux内核分析>MOOC课程htt ...
- ubuntu 12.04下 eclipse的安装
1首先下载有关的JDK sudo apt-get install openjdk-7-jre 由于是源内的东西,所以只许执行上面这一步,就自动帮你下载 安装 以及配置,无需繁琐的操作. 这里ubunt ...
- WordCount 程序的实现
WordCount是一个常见的工具,它能统计文本文件的字数.单词数和行数.在本次项目中,要求写一个命令行程序,模仿已有的WordCount.exe的功能,并加以扩充,统计出某程序设计语言源文件的字符数 ...
- java词频统计——改进后的单元测试
测试项目 博客文章地址:[http://www.cnblogs.com/jx8zjs/p/5862269.html] 工程地址:https://coding.net/u/jx8zjs/p/wordCo ...
- HDU 2051 Bitset
http://acm.hdu.edu.cn/showproblem.php?pid=2051 Problem Description Give you a number on base ten,you ...
- Docker(二十五)-Docker Machine
Docker Machine 是什么? Docker Machine 是 Docker 官方提供的一个工具,它可以帮助我们在远程的机器上安装 Docker,或者在虚拟机 host 上直接安装虚拟机并在 ...