hdu-acm steps FatMouse's Speed
本想用暴力法先试试的,案例和自己找的数据都过掉了,但是始终wa,本来期待的是tle,结果始终wa。所以也就懒的管了,直接用dp来做了。主要是因为最近在刷暴力法和dp这两个专题,所以才想好好利用一下这道题。如果有哪位发现了我的第一个程序的错误,还望告知。
暴力法(此程序不知道为何wa)
1 #include"iostream"
2 #include"stdio.h"
3 #include"string.h"
4 #include"cmath"
5 #include"algorithm"
6 #define mx 1005
7 using namespace std;
8 int cur[mx];
9 int end1[mx];
10 struct node
11 {
12 int v;
13 int w;
14 int num;
15 }mice[mx];
16 node temp;
17 bool cmp(const node a,const node b)
18 {
19 if(a.w!=b.w) return a.w<b.w;
20 else return a.v>b.v;
21 }
22 int main()
23 {
24 int i,j,k,sum=0;
25 // while(1){
26 while(scanf("%d%d",&mice[sum].w,&mice[sum].v)==2) {mice[sum].num=sum+1;sum++;}
27 sort(mice,mice+sum,cmp);
28 int maxsum=0;
29 for(i=0;i<sum;i++)
30 {
31 k=0;
32 for(j=i;j<sum;j++)
33 {
34 if(j==i)
35 {cur[k]=mice[j].num;temp=mice[i];}
36 else if(temp.v>mice[j].v&&temp.w!=mice[j].w)
37 {
38 cur[++k]=mice[j].num;
39 temp=mice[j];
40 }
41 }
42 if(k+1>maxsum) {memcpy(end1,cur,sizeof(cur));maxsum=k+1;}
43 }
44 cout<<maxsum<<endl;
45 for(i=0;i<maxsum;i++)
46 cout<<end1[i]<<endl;
47 // }
48 return 0;
49 }
接下来是ac掉的简单dp:这道题的思路其实很简单,是一个典型的dp问题——最长上升子序列问题。状态转移方程为
if(dp[j]+1>dp[i])dp[i]=dp[j]+1.用一个pre数组来记录每一个i对应的前一个j,用于后面回溯,将路径存入path中。maxlen用于记录最长上升子序列的长度。maxindex用于记录最长上升子序列对应的最大的i。
#include"iostream"
#include"stdio.h"
#include"cmath"
#include"algorithm"
#include"string.h"
#define mx 1005
using namespace std;
struct node
{
int w,v,index;
}mouse[mx];
int dp[mx];//记录每个以第i个数据结尾的符合要求的子列长度
int pre[mx];//记录i对应的上一个数据
int path[mx];//存放最终结果的下标
int maxlen;//最长序列的长度
int maxindex;//最长序列的最后一个数下标
bool cmp(const node a,const node b)
{
if(a.w!=b.w) return a.w<b.w;
else return a.v>b.v;
}
int main()
{
int i,j,k=;
while(scanf("%d%d",&mouse[k].w,&mouse[k].v)==)
{
dp[k]=;
pre[k]=;
mouse[k].index=k;//存放未排序前的序列号,因为结果需要输出的是这个序列号
k++;
}
sort(mouse+,mouse+k,cmp);//以重量从小到大为第一要求,速度从大到小为第二要求排序
maxlen=;
for(i=;i<k;i++)
{
for(j=;j<i;j++)
{
if(mouse[i].w>mouse[j].w&&mouse[i].v<mouse[j].v&&dp[j]+>dp[i])
{
dp[i]=dp[j]+;
pre[i]=j;//一第i个数据位末尾数据的前一个数据的小标是j,用于回溯
if(dp[i]>maxlen)//更新maxlen和maxindex
{
maxlen=dp[i];
maxindex=i;
}
}
}
}
i=;
while(maxindex) //回溯找到原始下标的序列
{
path[i++]=maxindex;
maxindex=pre[maxindex];
}
cout<<i<<endl;
while(i)
{
i--;
cout<<mouse[path[i]].index<<endl;
}
return ;
}
hdu-acm steps FatMouse's Speed的更多相关文章
- 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
Problem Description FatMouse believes that the fatter a mouse is, the faster it runs. To disprove th ...
- hdu acm steps Big Event in HDU
上网搜了一下这道题的解法,主要有两个方法,一种是采用母函数的方法,一种是采用0/1背包的方法. 先说一下母函数,即生成函数,做个比喻,母函数就是一个多项式前面的系数的一个整体的集合,而子函数就是这个多 ...
- HDU ACM 1078 FatMouse and Cheese 记忆化+DFS
题意:FatMouse在一个N*N方格上找吃的,每一个点(x,y)有一些吃的,FatMouse从(0,0)的出发去找吃的.每次最多走k步,他走过的位置能够吃掉吃的.保证吃的数量在0-100.规定他仅仅 ...
- hdu ACM Steps Section 1 花式A+B 输入输出格式
acm与oi很大的一个不同就是在输入格式上.oi往往是单组数据,而acm往往是多组数据,而且题目对数据格式往往各有要求,这8道a+b(吐槽..)涉及到了大量的常用的输入输出格式.https://wen ...
- HDU - 1160 (FatMouse's Speed )最长上升子序列
题意:一个元素有两个属性 w 和 sp 求在w严格递增的情况下 sp严格递减 用结构体 定义三个参数 w sp ix , ix是在输入时的顺序 因为我们要排序 之后把结构体数组 按从小到大排序 ...
- (最长上升子序列 并记录过程)FatMouse's Speed -- hdu -- 1160
http://acm.hdu.edu.cn/showproblem.php?pid=1160 FatMouse's Speed Time Limit: 2000/1000 MS (Java/Other ...
- 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 (DP)
FatMouse's Speed Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u Su ...
随机推荐
- 如何调试lua脚本
首先感谢下ZeroBrane Studio. 这里拿cocos2dx/samples/Lua/HelloLua做例子来说明,其他的都是同样道理. 1.下载调试Lua所需的IDE,地址在这.有经济实力的 ...
- ffplay 2.5.3 媒体播放器
下载地址 http://pan.baidu.com/s/1bnlMYB1 一定要解压到 D:\ffmpeg\ 目录下 双击 OpenWith_FFPlay.reg 注册ffplay 在视频文件名上面, ...
- 谈谈异步加载JavaScript
前言 关于JavaScript脚本加载的问题,相信大家碰到很多.主要在几个点—— 1> 同步脚本和异步脚本带来的文件加载.文件依赖及执行顺序问题 2> 同步脚本和异步脚本带来的性能优化问题 ...
- javaweb实现验证码功能
在javaweb的用户注册与登陆功能时,有时为了防止漏洞或者大量注册,可以使用验证码功能,下面是验证码的一个简单实现 验证码类 public class ValiImg extends HttpSer ...
- 用于主题检测的临时日志(ba86b8a0-7ed7-4b0b-bf1f-ce41aa2a5780 - 3bfe001a-32de-4114-a6b4-4005b770f6d7)
这是一个未删除的临时日志.请手动删除它.(ea9f667f-3be0-45c8-ad82-3acf819d571c - 3bfe001a-32de-4114-a6b4-4005b770f6d7)
- CodeIgniter - 数据库的增删改查
数据库操作无非是CRUD,用非装逼的语言来说就是增删改查.也许这一节会讲的很泛泛,或者很多人看不懂,没关系,大致的看看,知道是这么回事就好,继续往后看,后面会讲实例,这些枯燥而又抽象的东西可以先跳过, ...
- .net学习之多线程、线程死锁、线程通信 生产者消费者模式、委托的简单使用、GDI(图形设计接口)常用的方法
1.多线程简单使用(1)进程是不执行代码的,执行代码的是线程,一个进程默认有一个线程(2)线程默认情况下都是前台线程,要所有的前台线程退出以后程序才会退出,进程里默认的线程我们叫做主线程或者叫做UI线 ...
- 记C语言浮点数运算处理 "坑" 一则
看一小段C语言程序: int main() { float x = 1.3; x = x - (int)x; ); ; } 在你心目中, 变量 I 是怎样的结果? 如果你理所当然地认为是3的话, 那么 ...
- 自动、手动同步FishEye, JIRA的联系人信息
背景:在将FishEye和JIRA配置成共用用户信息,并且可以在二者之间自由切换,此时FishEye里的用户信息是不能更改的,只有更新了JIRA,然后让其同步至FishEye才行,如何进行设置呢? 答 ...
- Visual Studio 2015和ASP.NET 5中可用的前端开发工具集
最近微软发布了一本白皮书,谈到了一些可以和Visual Studio 2015和ASP.NET 5配合使用的JS/前端Web开发工具(比如:函数库.任务执行器.框架等). 由于现在前端开发的生态系统在 ...