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 都要欺负我这种智商不过关的渣渣啊```

 #include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
#define max(a,b) a>b?a:b
#define inf 0x3f3f3f3f
int dp[]; struct Mouse{
int w,s,n,l;
}m[]; int cmp(Mouse m1,Mouse m2){
if(m1.w==m2.w)return m1.s<m2.s;
return m1.w>m2.w;
} int main(){
int c=,i,j;
while(scanf("%d%d",&m[c].w,&m[c].s)!=EOF){
m[c].n=c;
m[c].l=;
// if(c==9)break;
c++;
}
/*
printf("\n");
for(i=1;i<=c;i++)printf("%d %d\n",m[i].w,m[i].s);
printf("\n");
*/
sort(m+,m+c+,cmp);
m[].w=inf;
m[].s=;
m[].l=;
m[].n=;
int ans=;
/* printf("\n");
for(i=0;i<=c;i++){
printf("%d %d\n",m[i].w,m[i].s);
}
printf("\n");
*/ for(i=;i<=c;i++){
dp[i]=;
for(j=;j<i;j++){
if(m[j].w>m[i].w&&m[j].s<m[i].s){
if(dp[j]+>=dp[i]){
dp[i]=dp[j]+;
m[i].l=j;
if(dp[i]>dp[ans])ans=i;
}
}
}
}
printf("%d\n",dp[ans]);
while(m[ans].l!=){
// printf("%d %d ",m[ans].w,m[ans].s);
printf("%d\n",m[ans].n);
ans=m[ans].l;
}
// printf("%d %d ",m[ans].w,m[ans].s);
printf("%d\n",m[ans].n);
return ;
}

hdu1160 dp的更多相关文章

  1. HDU1160(KB12-J DP)

    FatMouse's Speed Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) ...

  2. dp求顺序hdu1160

    题意是仅仅求一次的顺序.先依照速度从大到小排序,速度想等到按体重增序排列. 然后基本就变成了求已定顺序序列的最长递增序列递增,跟那个求一致最大序列和的基本一致. dp[i]里存储的是到当前i最大的递增 ...

  3. hdu1160简单dp最长下降子序列

    /* 简单dp,要记录顺序 解:先排序,然后是一个最长下降子序列 ,中间需记录顺序 dp[i]=Max(dp[i],dp[j]+1); */ #include<stdio.h> #incl ...

  4. HDU1160 FatMouse's Speed —— DP

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

  5. DP总结 ——QPH

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

  6. DP一下,马上出发

    简单DP i.May I ask you for a dance(体舞课软广植入) 这题的状态转移方程为:dp[i][j]=max(dp[i-1][j-1]+a[i][j],dp[i][j-1]);( ...

  7. dp 入门

    1.HDU 1003 求最长连续相加的和. dp[i]=max(a[i],dp[i-1]+a[i]); dp[i]表示以 i 结尾的最大值. 再开/个strat去标记从哪里开始. #include & ...

  8. 「kuangbin带你飞」专题十二 基础DP

    layout: post title: 「kuangbin带你飞」专题十二 基础DP author: "luowentaoaa" catalog: true tags: mathj ...

  9. POJ3616 Milking Time —— DP

    题目链接:http://poj.org/problem?id=3616 Milking Time Time Limit: 1000MS   Memory Limit: 65536K Total Sub ...

随机推荐

  1. 12月16日 增加一个购物车内product数量的功能, 自定义method,在helper中定义,计算代码Refactor到Model中。

    仿照Rails实战:购物网站 教材:5-6 step5:计算总价,做出在nav上显示购物车内product的数量. 遇到的❌: 1. <% sum = 0 %> <% current ...

  2. Confluence 6 嵌套用户组的示例

    示例 1 : 用是一个子用户组成员 想象在你的目录服务器中,存在下面 2 个用户组: staff marketing 成员: marketing 用户组是  staff 的成员. 用户 jsmith ...

  3. Activiti工作流笔记(4)

    Activiti工作流启动流程 /** * 启动流程 * */ public class ActivitiTest2 { RepositoryService repositoryService; Ru ...

  4. Oracle12c中性能优化增强新特性之数据库智能闪存

    智能闪存功能最初在XD中引入.从Oracle11.2.0.2开始,除了用于XD存储,还可用于任何闪盘.Oracle12c中,不需卷管理器就可以使用闪盘. 1.  简介 智能闪存在solaris和lin ...

  5. 判断回文字符串(c,python)

    回文字符串:一个字符串,不论是从左往右,还是从右往左,字符的顺序都是一样的(如abba,abcba等) 判断回文字符串比较简单,即用两个变量left,right模仿指针(一个指向第一个字符,一个指向最 ...

  6. JVM笔记(二) 垃圾收集器(1)

    垃圾收集器 主要通过阅读<深入了解Java虚拟机>(周志明 著)和网络资源汇集而成,为本人学习JVM的笔记.同时,本文理论基于JDK 1.7版本,暂不考虑 1.8和1.9 的新特性,但可能 ...

  7. MySQL|RESTRICT|NO ACTION|CASCADE| SET NULL四种外键约束

    外键约束比较多得两种情况: 1.父表更新时子表也更新,父表删除时如果子表有匹配的项,删除失败: ON UPDATE CASCADE ON DELETE RESTRICT 1 2.父表更新时子表也更新, ...

  8. (C#基础)Linq学习理解

    一遍学习基础,一遍练习打字,很多乐趣. 代码 using System; using System.Collections.Generic; using System.Linq; using Syst ...

  9. ZOJ 3829 Known Notation 贪心 难度:0

    Known Notation Time Limit: 2 Seconds      Memory Limit: 65536 KB Do you know reverse Polish notation ...

  10. POJ 2195 Going Home 最小费用流 难度:1

    Going Home Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 17955   Accepted: 9145 Descr ...