动态规划:HDU1160-FatMouse's Speed(记录动态规划状态转移过程)
FatMouse's Speed
Time Limit: 2000/1000 MS (Java/Others)
Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 5546 Accepted Submission(s): 2393
Special Judge
but the speeds are decreasing.
The data for a particular mouse will consist of a pair of integers: the first representing its size in grams and the second representing its speed in centimeters per second. Both integers are between 1 and 10000. The data in each test case will contain information
for at most 1000 mice.
Two mice may have the same weight, the same speed, or even the same weight and speed.
m[n] then it must be the case that
W[m[1]] < W[m[2]] < ... < W[m[n]]
and
S[m[1]] > S[m[2]] > ... > S[m[n]]
In order for the answer to be correct, n should be as large as possible.
All inequalities are strict: weights must be strictly increasing, and speeds must be strictly decreasing. There may be many correct outputs for a given input, your program only needs to find one.
6000 2100
500 2000
1000 4000
1100 3000
6000 2000
8000 1400
6000 1200
2000 1900
4
5
9
7
#include<bits/stdc++.h>
using namespace std;
const int maxn = 1010;
struct mice
{
int w,s;
int pos;
} m[maxn]; struct Dp
{
int num[maxn];
int Num;
} dp[maxn];
bool cmp(mice a,mice b)
{
return a.w<b.w;
}
int main()
{
int t = 1;
int W,S;
while(scanf("%d%d",&W,&S) != EOF)//处理这个题输入的的办法
{
m[t].w = W;
m[t].s = S;
m[t].pos = t;
t++;
} /*
可以输入0 0结束看看自己的输入是否正确
while(scanf("%d%d",&W,&S) && W)//处理这个题输入的的办法
{
m[t].w = W;
m[t].s = S;
m[t].pos = t;
t++;
}
t--;
for(int i=1;i<=t;i++)
printf("%d %d\n",m[i].w,m[i].s); */ t--;//用来记录有多少个元素
int Max = 0;//记录最长的递减子序列
sort(m,m+t,cmp);//拍一下序,cmp函数自己写一下
for(int i=1;i<=t;i++)
{
dp[i].Num = 1;
dp[i].num[1] = m[i].pos;
}
for(int i=1; i<=t; i++)
{
for(int j=0; j<=i; j++)
{
if(m[j].s > m[i].s && m[j].w < m[i].w)
{
if(dp[j].Num+1 > dp[i].Num)//如果符合状态的转移要求
{
for(int k=1;k<=dp[j].Num;k++)//记录状态的数组一起跟着转移
{
dp[i].num[k] = dp[j].num[k];
dp[i].num[k+1] = m[i].pos;//当前状态也要放入
}
dp[i].Num = dp[j].Num + 1;
if(dp[i].Num > Max)
Max = dp[i].Num;
}
}
}
} bool flag = false;
printf("%d\n",Max);
for(int i=1;i<=t;i++)
{
if(dp[i].Num == Max)
{
flag = true;
for(int j=1;j<=dp[i].Num;j++)
{
if(dp[i].num[j]!=0)
printf("%d\n",dp[i].num[j]);
}
break;
}
}
return 0;
}
动态规划:HDU1160-FatMouse's Speed(记录动态规划状态转移过程)的更多相关文章
- HDU 1160 FatMouse's Speed (动态规划、最长下降子序列)
FatMouse's Speed Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) ...
- HDU1160 FatMouse's Speed —— DP
题目链接:http://acm.split.hdu.edu.cn/showproblem.php?pid=1160 FatMouse's Speed Time Limit: 2000/1000 MS ...
- HDU1160:FatMouse's Speed(最长上升子序列,不错的题)
题目:http://acm.hdu.edu.cn/showproblem.php?pid=1160 学的东西还是不深入啊,明明会最长上升子序列,可是还是没有A出这题,反而做的一点思路没有,题意就不多说 ...
- [HDU1160]FatMouse's Speed
题目大意:读入一些数(每行读入$w[i],s[i]$为一组数),要求找到一个最长的序列,使得符合$w[m[1]] < w[m[2]] < ... < w[m[n]]$且$s[m[1] ...
- 读懂TCP状态转移
读懂TCP状态转移过程,对理解网络编程颇有帮助,本文将对TCP状态转移过程进行介绍,但各状态(总共11个)含义不在本文介绍的范围,请参考文末的书目列表. TCP状态转换图(state transiti ...
- hdu FatMouse's Speed 动态规划DP
动态规划的解决方法是找到动态转移方程. 题目地址:http://acm.hdu.edu.cn/game/entry/problem/show.php?chapterid=3§ionid ...
- hdoj1160 FatMouse's Speed 动态规划
FatMouse's Speed Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) ...
- HDU 1160 FatMouse's Speed(要记录路径的二维LIS)
FatMouse's Speed Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) ...
- HDU 1160:FatMouse's Speed(LIS+记录路径)
FatMouse's Speed Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) ...
随机推荐
- Windows下 bat调用TSql问题
一.建立sql文件 在sql管理工具中写好sql文件,并保证能够正常运行,之后用unique编码保存. 二.建立一个bat文件osql -U登录用户 -P密码 -S服务器 <sql文件.sql ...
- SpringBoot | 第八章:统一异常、数据校验处理
前言 在web应用中,请求处理时,出现异常是非常常见的.所以当应用出现各类异常时,进行异常的捕获或者二次处理(比如sql异常正常是不能外抛)是非常必要的,比如在开发对外api服务时,约定了响应的参数格 ...
- python之其他模块的用法
1.时间模块 在Python中通常有三种表示时间的方式,分别是时间戳.元组.格式化的时间字符串. 时间模块的常用方法 time.sleep() #指定延迟时间 time.time() #当前时间的 ...
- It does not do to dwell on dreams and forget to live.
It does not do to dwell on dreams and forget to live.不要过于依赖梦想,却忘了生活.
- C/C++ sort函数的用法
sort函数的用法(#include<algorithm>) 做ACM题的时候,排序是一种经常要用到的操作.如果每次都自己写个冒泡之类的O(n^2)排序,不但程序容易超时,而且浪费宝贵的比 ...
- 百倍性能的PL/SQL优化案例(r11笔记第13天)
我相信你是被百倍性能的字样吸引了,不过我所想侧重的是优化的思路,这个比优化技巧更重要,而结果嘛,其实我不希望说成是百倍提升,“”自黑“”一下. 有一个真实想法和大家讨论一下,就是一个SQL语句如果原本 ...
- hadoop上传文件失败报错(put: Cannot create file/eclipse.desktop._COPYING_. Name node is in safe mode.)
解决办法: 离开安全模式方法:执行以下命令即可 bin/hadoop dfsadmin -safemode leave 若不处理安全模式的话,web服务无法启动,dfsadmin report结果异 ...
- Pylint 是什么
Pylint 是什么 Pylint 是一个 Python 代码分析工具,它分析 Python 代码中的错误,查找不符合代码风格标准(Pylint 默认使用的代码风格是 PEP 8,具体信息,请参阅参考 ...
- 如果CDN服务器出了问题,怎么做不影响自己的网站
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.4.3.jquery.min.js"></ ...
- codeforces 600A Extract Numbers
模拟题,意思是一个字符串,单词直接用','或';'来分割,可以为空,把不含前导0的整数和其他单词分别放入A和B.按照一定格式输出. 没有用stl的习惯.维护两个下标i,j,表示开区间(i,j),两段补 ...