hdu 1160 FatMouse's Speed 最长上升子序列变形+排序+方案打印
时间:2021-10-06
本文章向大家介绍hdu 1160 FatMouse's Speed 最长上升子序列变形+排序+方案打印,主要包括hdu 1160 FatMouse's Speed 最长上升子序列变形+排序+方案打印使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
一看两个维度,下意识要么排序再dp要么对两个分别开一维。
先sort可以保证体重上升,再跑最长上升子序列(对原来的数取相反数即可)。
#
填坑1:如果不存在合法解的话,ans也要更新,所以在枚举j前要加个if
填坑2:如果ans=1的话,调整一下回溯语句的顺序可以防止最后一个卡了没输出
填坑3:改了cmp,判断了weight相同的情况,写了return <和return >的,仍wa
----
待填
#include <iostream> #include <math.h> #include <string.h> #include <vector> #include <map> #include <queue> #include <stdio.h> #include <algorithm> #include <cstdio> using namespace std; const int maxn=5000; struct lys{ int weight,speed; }mouse[maxn]; bool cmp(lys a,lys b) { if(a.weight!=b.weight) { return a.weight<b.weight; } else { return a.speed<b.speed; } } int print[maxn],dp[maxn],fa[maxn]; int main( ){ //freopen("lys.in","r",stdin); int a,b,cnt=0; while(cin>>a>>b) { cnt++; mouse[cnt].weight=a;mouse[cnt].speed=-b; } sort(mouse+1,mouse+1+cnt,cmp); int ans=-20211006,pos; for(int i=1;i<=cnt;i++) { dp[i]=1; fa[i]=i; if(dp[i]>ans) { ans=dp[i]; pos=i; } for(int j=1;j<=i-1;j++) { if(mouse[i].speed>mouse[j].speed) { if(dp[j]+1>dp[i]) { dp[i]=max(dp[i],dp[j]+1); fa[i]=j; if(dp[i]>ans) { ans=dp[i]; pos=i; } } } } } printf("%d\n",ans); cnt=0; for(int i=pos;;) { cnt++; print[cnt]=i; if(fa[i]==i) { break; } i=fa[i]; } for(int i=cnt;i>=1;i--) { printf("%d\n",print[i]); } }
原文地址:https://www.cnblogs.com/liyishui2003/p/15371208.html
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法