zoj 1108解题报告
来源:互联网 发布:蜂窝数据打开连不上网 编辑:程序博客网 时间:2024/06/11 19:45
问题描述:给出一列数据 格式为 老鼠体重 移动速度;
求出 体重越大 速度越慢的最长序列
比如给出数据
求出 体重越大 速度越慢的最长序列
比如给出数据
6008 1300
6000 2100
500 2000
1000 4000
1100 3000
6000 2000
8000 1400
6000 1200
2000 1900
可以求得结果
4 //注释:表示最长序列长度 以下4位即为按体重越轻 速度越快原则排序的序列
4
5
9
7
问题描述的不是很清楚 请参照原题http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=108
解题思路:问题的关键在于 从哪只老鼠开始排序会得到最长序列,很明显可以用DP解题,设想从任意一只老鼠开始,
以它为起点开始的序列的第二个元素肯定满足以下条件
1:它的体重比上一次老鼠重 2:它的速度比上一次老鼠慢,3:在所有满足1,2条件的老鼠中 以它开始的序列最长
所以问题就转化为求以第二只老鼠开始的最长序列。。。。以此递推下去,问题得解
- //============================================================================
- // Name : zoj1108.cpp
- // Author : zl
- // Version : 0.1
- // Copyright : Your copyright notice
- //
- //============================================================================
- #include <iostream>
- #include <vector>
- #include <algorithm>
- using namespace std;
- struct mice
- {
- int w,s,index;
- bool operator<(const mice& m) const
- {
- return w<m.w;
- }
- };
- struct statu
- {
- int max,next;
- statu():max(-1),next(-1){}
- };
- statu result[1000];
- vector<mice> data;
- int seachResult(int index)
- {
- if(result[index].max!=-1)
- return result[index].max;
- else
- {
- int end=data.size();
- int max=0;
- int s=data[index].s;
- int w=data[index].w;
- int temp;
- for(int i=index+1;i<end;++i)
- {
- if(data[i].w==w)
- continue;
- if(data[i].s<s)
- {
- temp=seachResult(i);
- if(temp>max)
- {
- max=temp;
- result[index].next=i;
- }
- }
- }
- result[index].max=++max;
- return max;
- }
- }
- int main() {
- mice temp;
- int tt=0;
- while((scanf("%d%d",&temp.w,&temp.s))!=EOF)
- {
- temp.index=++tt;
- data.push_back(temp);
- }
- sort(data.begin(),data.end());
- int end=data.size();
- int max=0,start,tep;
- for(int i=0;i<end;++i)
- {
- tep=seachResult(i);
- if(tep>max)
- {
- max=tep;
- start=i;
- }
- }
- printf("%d/n",max);
- while(start!=-1)
- {
- printf("%d/n",data[start].index);
- start=result[start].next;
- }
- return 0;
- }
- zoj 1108解题报告
- zoj 1005 解题报告
- zoj 1027解题报告
- [解题报告]ZOJ 1001
- zoj 3212 解题报告
- zoj 1312解题报告
- ZOJ 1115 解题报告
- zoj 1002解题报告
- ZOJ 1610 解题报告
- ZOJ-1796解题报告
- ZOJ 3201解题报告
- ZOJ 1649 解题报告
- ZOJ 1048解题报告
- ZOJ 1115解题报告
- ZOJ 2104解题报告
- Friend Number ZOJ 解题报告
- ZOJ 3710 Friends 解题报告
- ZOJ 3717 Balloon 解题报告
- 将网页中的静态内容与动态内容在浏览器端分别呈现的方法
- 【转】GridView技巧大集合···不断完善中
- iText日記
- 去掉字符串中以某个字符为标志后面的字符
- javascript验证大全(转)
- zoj 1108解题报告
- how to solve the problem which is the imail software can not send email in wan,but can send email in lan.
- pageContext
- IE首页被篡改的解决办法
- arcgis放大图片
- 开源测试工具——功能测试工具
- 质量保证的六个模式
- hwo to install apache+mysql+php in linux as 5
- trunc用法