J - FatMouse's Speed
J - FatMouse’s Speed
题目入口:J - FatMouse’s Speed
解题思路
这道题要求我们排出最大的体重越来越大速度越来越慢的老鼠序列.
首先我们需要一个结构体存放每个老鼠的信息
体重 速度 编号
一个带自定义cmp函数的sort函数排出按体重升序的顺序(这里注意如果体重相等,则让速度快的排前面)
好了 现在我们开始dp
对于一只老鼠1,我们看它后面体重比它大速度比它慢的老鼠2,如果有,取老鼠2得到的最大值加上老鼠1(dp[j]+1
)和老鼠1当前最大值(dp[i]
)的最大值
最后取dp[i]中最大值即为答案
注意本题要求输出路径
那我们我们再加一段代码输出路径
思路是从头遍历老鼠们
如果选取老鼠i得到的最大值(dp[i]
)为目前最优结果(Max
)
说明它是我们的天选之鼠,把它输出出来
我们的最优结果随之减少一个鼠额
随着一个又一个天选之鼠的输出
最优结果已到零则结束挑选
AC代码
#include <iostream>
#include <cstdio>
#include <algorithm>
using namespace std;
#define MaxSize 1010 //注意依题更改数组大小
int dp[MaxSize]; //存放当前最大不连续递增子列长度
struct mice{int w;int s;int index;
}m[1005];
bool cmp(mice x, mice y){if (x.w == y.w) return x.s > y.s;return x.w < y.w;
}
int main() {int pos = 1, x, y;while (scanf("%d%d", &x, &y)!=EOF){m[pos].w = x;m[pos].s = y;m[pos].index = pos;pos++;}sort(m+1, m+pos+1, cmp);int Max = 0;for (int i = pos; i >= 1; i--){dp[i] = 1;for (int j = i; j <= pos; j++){if (m[j].w > m[i].w && m[j].s < m[i].s){dp[i] = max(dp[i], dp[j] + 1);}}Max = max(Max, dp[i]);}printf("%d\n", Max);for (int i = 1; i <= pos; i++){if (dp[i] == Max){printf("%d\n", m[i].index);Max--;}if (!Max) break;}return 0;
}
J - FatMouse's Speed相关推荐
- 序列输出ZOJ1108 FatMouse's Speed
PS:今天上午,非常郁闷,有很多简单基础的问题搞得我有些迷茫,哎,代码几天不写就忘.目前又不当COO,还是得用心记代码哦! ZOJ1108 FatMouse's Speed 最长下落子序列,这题挺好的 ...
- 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
FatMouse's Speed // File Name: hdu1160.cpp // Author: rudolf // Created Time: 2013年04月25日 星期四 14时47分 ...
- FatMouse's Speed(LIS+路径记录)
题目:FatMouse's Speed 题解:采用O(n^2)的LIS算法,用path记录路径 #include<bits/stdc++.h> using namespace std; t ...
- HDU1160:FatMouse's Speed(最长上升子序列,不错的题)
题目: http://acm.hdu.edu.cn/showproblem.php?pid=1160 学的东西还是不深入啊,明明会最长上升子序列,可是还是没有A出这题,反而做的一点思路没有,题意就不多 ...
- hdu-acm steps FatMouse's Speed
本想用暴力法先试试的,案例和自己找的数据都过掉了,但是始终wa,本来期待的是tle,结果始终wa.所以也就懒的管了,直接用dp来做了.主要是因为最近在刷暴力法和dp这两个专题,所以才想好好利用一下这道 ...
- HDU - 1160 FatMouse's Speed(最长不下降子序列)
题目链接:点击查看 题目大意:给出许多二元组(W,S),最后要求输出最长的满足W严格递增,S严格递减的子序列长度,以及方案,输出任意一种即可 题目分析:看起来像二维偏序,其实对任意一维排序后求最长不下 ...
- FatMouse's Speed hdu 1160(动态规划,最长上升子序列+记录路径)
http://acm.hdu.edu.cn/showproblem.php?pid=1160 题意:现给出老鼠的体重与速度,要求你找出符合要求的最长子序列. 要求是 W[m[1]] < ...
- HDOJ 1160 FatMouse's Speed
第一个用动态规划完成的题目O(∩_∩)O哈哈~.忘记赋值之前的判断了,结果悲剧WA,算是第一次使用动态规划的一个小教训吧. View Code 1 //#include <fstream> ...
最新文章
- Linux下C/C++编译环境搭建
- android调试——教你用dumpsys命令调试
- Native与H5交互的一些解决方法
- 非proguard无法发现jar(已编译)的外部引用错误,(javac + proguard 则会检查)
- python字符串连接操作-Python连接字符串过程详解
- 大前端时代安全性如何做
- java猜单词游戏_9 java基础综合编程练习---猜单词游戏
- Spring-@value用法详解与苏宁框架vars的解释
- mysql 正则 换行符_MySQL 正则表达式
- 以下关于java文件名的叙述正确的有_sun java认证考试题库
- Java毕业设计-医院药品管理系统
- 华为云OBS数据桶使用
- JavaScript 学习笔记 ——document
- JPinyin繁体相互转换
- 通过泰勒展开求自然常数e,R语言实现
- 网联清算平台45家股东名单出炉【附股权明细表】
- mysql获取上月26号_根据当前时间查询上月26号的日期 本月月25号的日期
- python time模块以秒计时保留两位小数,格式化时间戳
- 搭建机器人电控系统——PID算法——什么是PID?
- 【zzq‘笔记】HDR成像技术学习(一)