hdu1160

题意:给出很多老鼠的数据,分别是它们的体重和跑速,为了证明老鼠越重跑得越慢,要找一组数据,由若干个老鼠组成,保证老鼠的体重依次增加而跑速依次减小,问这组数据最多能有多少老鼠,并按体重从小到大输出这些老鼠的顺序。

并不是难题,我觉得有点类似穷国富国或者是堆砖块,我的做法就是首先将这些老鼠按体重从大到小排序(为什么从大到小呢,因为我是用结构体模拟指针记录了上一只老鼠的序号,所以最终会倒序输出,排序的时候就按倒序排序了)

昂,介绍下我的结构体,是记录了 w(weight),s(speed),n(number),l(last),体重和速度肯定是要记录的用于比较,n 是由于我要进行排序,数组下标会被打乱,所以用 n 单独记录这只老鼠原本的位置,l 则是记录这只老鼠上一只老鼠的数组下标,如果前面没有老鼠,那就是指向第 0 只老鼠(重量是极大,速度是 0,n 、 l 都初始化为0).

当对体重排完序之后,就从前往后开始 dp ,对第 i 只老鼠,遍历从 0 到 i - 1 的老鼠 j ,如果 j 比 i 重而且速度慢,那就 dp[ i ] = max ( dp [ i ] , dp [ j ] + 1 ),并且判断 dp [ i ] 是不是最大值,如果是就记录下 i 便于最后输出数据量最大的一组老鼠。

然后就这么结束了。

恩,接下来是吐槽时间,看见我代码里面一堆堆绿翔色的 debug 代码了吗```是的,一开始我读入都不对,我计数的 c 是在读取数据的时候 ++c 的,但是每次读两个数据,我就很自以为是地一个用了 ++c 一个直接 c,以为会在第一个加了,第二个就是沿用加过的,于是```各种坑,++这种东西还是要足够水平才能用啊,我这种渣渣还是老老实实后面加 c++ 吧```;

这并不是全部,然后我在纠结样例那个顺序究竟是怎么得到的呢!!!为什么我每次都和它有一两个不一样,我试了要不要排速度? dp 值相等的时候要不要取?各种各种,正当我即将绝望想要求助学长的时候```我突然看到说只要求一种可行解就可以了!!!英语啊我的英语啊谁来拯救我的英语啊!!!

恩并不止是这样,当我明白是其中一种正确解就可以的时候我果断提交!WA!!!WTF!!!我换了种姿势又WA了一发,我觉得是时候找学长们谈论一下人生了```然后我突然又发现```由于读入的时候没有说读入多少个只是读到文件结束,所以我自己加了个读 9 个数据就跳出读取循环为了测试给的样例,但是我并记不住把它删掉!```果然把它注释掉就 AC 了,我的心好累,连 hdu 都要欺负我这种智商不过关的渣渣啊```

 1 #include<stdio.h>
 2 #include<string.h>
 3 #include<algorithm>
 4 using namespace std;
 5 #define max(a,b) a>b?a:b
 6 #define inf 0x3f3f3f3f
 7 int dp[1050];
 8
 9 struct Mouse{
10     int w,s,n,l;
11 }m[1050];
12
13 int cmp(Mouse m1,Mouse m2){
14     if(m1.w==m2.w)return m1.s<m2.s;
15     return m1.w>m2.w;
16 }
17
18 int main(){
19     int c=1,i,j;
20     while(scanf("%d%d",&m[c].w,&m[c].s)!=EOF){
21         m[c].n=c;
22         m[c].l=0;
23 //        if(c==9)break;
24         c++;
25     }
26 /*
27     printf("\n");
28     for(i=1;i<=c;i++)printf("%d %d\n",m[i].w,m[i].s);
29     printf("\n");
30 */
31     sort(m+1,m+c+1,cmp);
32     m[0].w=inf;
33     m[0].s=0;
34     m[0].l=0;
35     m[0].n=0;
36     int ans=0;
37 /*    printf("\n");
38     for(i=0;i<=c;i++){
39         printf("%d %d\n",m[i].w,m[i].s);
40     }
41     printf("\n");
42 */    for(i=1;i<=c;i++){
43         dp[i]=0;
44         for(j=0;j<i;j++){
45             if(m[j].w>m[i].w&&m[j].s<m[i].s){
46                 if(dp[j]+1>=dp[i]){
47                     dp[i]=dp[j]+1;
48                     m[i].l=j;
49                     if(dp[i]>dp[ans])ans=i;
50                 }
51             }
52         }
53     }
54     printf("%d\n",dp[ans]);
55     while(m[ans].l!=0){
56 //        printf("%d %d ",m[ans].w,m[ans].s);
57         printf("%d\n",m[ans].n);
58         ans=m[ans].l;
59     }
60 //    printf("%d %d ",m[ans].w,m[ans].s);
61     printf("%d\n",m[ans].n);
62     return 0;
63 }

View Code

转载于:https://www.cnblogs.com/cenariusxz/p/4290837.html

hdu1160 dp相关推荐

  1. dp打开思路2:POJ2533 HDU1114 HDU1260 HDU1160(水题不水)

    题目:https://vjudge.net/contest/68966#overview POJ2533 最长上升子序列,很平常的题,但是维持单调队列+二分还是值得一贴的,O(nlogn) 关键思想: ...

  2. HDU1160 FatMouse's Speed —— DP

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

  3. kuangbin专题十二 基础DP

    kuangbin专题十二 基础DP A - HDU1024 Max Sum Plus Plus B - HDU1029 Ignatius and the Princess IV C - HDU1069 ...

  4. DP总结 ——QPH

    常见优化 单调队列 形式 dp[i]=min{f(k)} dp[i]=max{f(k)} 要求 f(k)是关于k的函数 k的范围和i有关 转移方法 维护一个单调递增(减)的队列,可以在两头弹出元素,一 ...

  5. dp,sp,px相互转化

    方法一: public int sp2px(float sp) {return (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_SP, ...

  6. [JS][dp]题解 | #打家劫舍(一)#

    题解 | #打家劫舍(一)# 题目链接 打家劫舍(一) 题目描述 描述 你是一个经验丰富的小偷,准备偷沿街的一排房间,每个房间都存有一定的现金,为了防止被发现,你不能偷相邻的两家,即,如果偷了第一家, ...

  7. HDU 2084 数塔(DP)(JAVA版)

    数塔 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submiss ...

  8. dp cf 20190615

    A. Timofey and a tree 这个不算是dp,就是一个思维题,好难想的思维题,看了题解才写出来的, 把点和边分开,如果一条边的两个点颜色不同就是特殊边,特殊边两边连的点就叫特殊点, 如果 ...

  9. BZOJ 1003[ZJOI2006]物流运输(SPFA+DP)

    Problem 1003. -- [ZJOI2006]物流运输 1003: [ZJOI2006]物流运输 Time Limit: 10 Sec  Memory Limit: 162 MB Submit ...

最新文章

  1. Windows下的Memcache安装
  2. Page页面生命周期——微信小程序
  3. Kafka源码深度解析-序列3 -Producer -Java NIO
  4. 高斯噪声、高斯白噪声解析
  5. 你真的会写留言功能吗?
  6. Windows 10体验:文件资源管理器变成了首页
  7. java集合框架总结之思维导图
  8. Python3网络爬虫开发实战,Cookies 池的搭建,破解反爬虫!
  9. 小米5s升级Android8,小米5s、小米5s Plus升级8.0提前,好消息!
  10. oracle bfile备份,整理的一些oracle备份笔记 (zt)
  11. 虫师Selenium2+Python_11、自动化测试项目实战
  12. gcc警告: warning: dereferencing type-punned pointer will break strict-aliasing rules
  13. 安装caffe时候找不到boost怎么办?(boost的引用问题make can‘t find Boost‘s include files)
  14. 推荐一些逐步深入学习mysql的书籍
  15. VBA模拟抽签关键代码
  16. 计算机毕业设计-ssm超市进销存管理系统(项目+类似文档)超市仓库管理系统javaweb-超市库存预警管理系统源码
  17. Wi-Fi连接握手包抓包
  18. java 如何查看文件编码_java判断文件编码 终于弄懂了编码是怎么回事
  19. u盘复制文件第二台计算机无文件夹,u盘做成启动盘后拷贝进去的文件不见了怎么办...
  20. JAVA实现从服务器下载文件,将下载文件转成文件流响应给前端

热门文章

  1. 使用gparted-LiveCD对centos分区调整---virtualbox磁盘调整序2
  2. 利用金山快盘云服务搭建自己的SVN服务器
  3. 二叉树表达规定形式的代数表达式并计算表达式结果(无明显缺陷版本)
  4. 关于 Qt 5,你所需要了解的基础知识
  5. 再高深的 Python 面试难题,这门课都给你整得明明白白!
  6. 6个炫酷又好用的 Python 工具,个个都很奔放呀
  7. Redis持久化总结
  8. MyBatis 架构分层与模块划分-接口层
  9. 关于Execution 表达式
  10. Quartz框架中的Scheduler