本想用暴力法先试试的,案例和自己找的数据都过掉了,但是始终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 10057 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。

 1 #include"iostream"
 2 #include"stdio.h"
 3 #include"cmath"
 4 #include"algorithm"
 5 #include"string.h"
 6 #define mx 1005
 7 using namespace std;
 8 struct node
 9 {
10     int w,v,index;
11 }mouse[mx];
12 int dp[mx];//记录每个以第i个数据结尾的符合要求的子列长度
13 int pre[mx];//记录i对应的上一个数据
14 int path[mx];//存放最终结果的下标
15 int maxlen;//最长序列的长度
16 int maxindex;//最长序列的最后一个数下标
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=1;
25     while(scanf("%d%d",&mouse[k].w,&mouse[k].v)==2)
26     {
27         dp[k]=1;
28         pre[k]=0;
29         mouse[k].index=k;//存放未排序前的序列号,因为结果需要输出的是这个序列号
30         k++;
31     }
32     sort(mouse+1,mouse+k,cmp);//以重量从小到大为第一要求,速度从大到小为第二要求排序
33     maxlen=0;
34     for(i=1;i<k;i++)
35     {
36         for(j=1;j<i;j++)
37         {
38             if(mouse[i].w>mouse[j].w&&mouse[i].v<mouse[j].v&&dp[j]+1>dp[i])
39             {
40                 dp[i]=dp[j]+1;
41                 pre[i]=j;//一第i个数据位末尾数据的前一个数据的小标是j,用于回溯
42                 if(dp[i]>maxlen)//更新maxlen和maxindex
43                 {
44                     maxlen=dp[i];
45                     maxindex=i;
46                 }
47             }
48         }
49     }
50     i=0;
51     while(maxindex) //回溯找到原始下标的序列
52     {
53         path[i++]=maxindex;
54         maxindex=pre[maxindex];
55     }
56     cout<<i<<endl;
57     while(i)
58     {
59         i--;
60         cout<<mouse[path[i]].index<<endl;
61     }
62     return 0;
63 }

转载于:https://www.cnblogs.com/acm-jing/p/4250499.html

hdu-acm steps FatMouse's Speed相关推荐

  1. HDU ACM Steps 攻略

    HDU ACM Steps 攻略- Admin 2011年10月14日 名人名言:未来是光明而美丽的,爱它吧,向它突进,为它工作,迎接它,尽可能地使它成为现实吧!--车尔尼雪夫斯基 总结了一下ACM ...

  2. HDU ACM Steps攻略 ACM Steps的全部内容

    原地址:http://www.byywee.com/page/M0/S607/607452.html 总结了一下ACM STEPS的各章内容,趁便附上我的Steps题号(每人的不一样). 别的,此文首 ...

  3. HDU ACM 1078 FatMouse and Cheese 记忆化+DFS

    题意:FatMouse在一个N*N方格上找吃的,每一个点(x,y)有一些吃的,FatMouse从(0,0)的出发去找吃的.每次最多走k步,他走过的位置能够吃掉吃的.保证吃的数量在0-100.规定他仅仅 ...

  4. HDU OJ ACM Steps 上的题目详细介绍

    之前在杭电 OJ 上做题,看到有 ACM Steps 这个链接,进去之后发现是一个类似于闯关的机制,可以增加做题人的激情--据说完全通关后会有奖励,不知道是不是真的.但是里面没有题目的分类介绍,每一关 ...

  5. HDU1160 FatMouse's Speed —— DP

    题目链接:http://acm.split.hdu.edu.cn/showproblem.php?pid=1160 FatMouse's Speed Time Limit: 2000/1000 MS ...

  6. HDOJ acm steps 3.1.1

    (都是递推求值,呵呵,好开心- - ) 今天又是在自习室通宵(文明玩的停不下来了) 游戏玩完想想该水题了,于是打开了HDOJ的ACM STEPS(这是个好东西,就像他的名字,一步步来的) 2.3.x貌 ...

  7. 序列输出ZOJ1108 FatMouse's Speed

    PS:今天上午,非常郁闷,有很多简单基础的问题搞得我有些迷茫,哎,代码几天不写就忘.目前又不当COO,还是得用心记代码哦! ZOJ1108 FatMouse's Speed 最长下落子序列,这题挺好的 ...

  8. 杭电 HDU ACM 圆桌会议

    圆桌会议 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submi ...

  9. FatMouse's Speed

    FatMouse's Speed // File Name: hdu1160.cpp // Author: rudolf // Created Time: 2013年04月25日 星期四 14时47分 ...

最新文章

  1. php的memcache和memcached扩展区别
  2. 如何自动校正服务器时间,几个常用校正服务器时间
  3. 阿里云云服务器更新GCC是提示错误解决方案
  4. 日本推出机器人代理相亲,相亲现场帮你自我介绍
  5. QDoc包括图片includingimages
  6. springboot @RequestBody 接收字符串
  7. (九)nodejs循序渐进-Express框架(进阶篇)
  8. 虚拟化平台cloudstack(7)——新版本的调试
  9. ajax 执行成功 modal 关闭_Ajax请求中的async:false/true的作用
  10. 3.1 Zabbix企业级分布式监控系统 --- zabbix 安装
  11. mysql bigint 转int_技术分享 | MySQL ?删库不跑路(建议收藏)
  12. java 装饰者模式 替代方案_如何利用装饰者模式在不改变原有对象的基础上扩展功能...
  13. 2022电工杯A题利用启发式算法寻优
  14. 本科毕业论文引用、编写英文参考文献格式的方法
  15. SketchUp Pro 2018 Mac OS X/Windows 64/32位产品下载
  16. Java封装代码年龄性别姓名_Java生成随机姓名、性别和年龄的实现示例
  17. 只工作不玩耍,聪明的孩子也变傻
  18. 编程艺术——软件设计模式SOLID原则
  19. HTML嵌套Flash播放视频
  20. [杂言]打坐一定要盘腿么?

热门文章

  1. android游戏加载,Android 游戏引擎libgdx 资源加载进度百分比显示案例分析
  2. 把libreoffice集成到网页中_Python3.7.3安装教程并集成Sublime Text3
  3. 服务器温控系统,服务器温度监控
  4. Linux下的rsync远程增量备份详解
  5. Windows远程桌面管理--功能强大的远程批量管理工具
  6. Sitecore® 8.2 Professional Developer考试心得
  7. java字符串根据空格截取并存进list,并在每个元素前后加上/
  8. C# 调用颜色的RGB值_RGB颜色转换十六进制颜色
  9. Zabbix JMX之tomcat监控
  10. 第三个spring冲刺第5、6、7天(三天汇总)