天天写算法之FatMouse's Speed

智商欠费系列,记录路径 点击打开链接


#include <iostream>
#include <iomanip>
#include<queue>
#include<math.h>
#include<algorithm>
#include<string.h>
#include<stdlib.h>
#include<stdio.h>
#include<iomanip>
#include<string.h>
#include<sstream>
#include<string>
//定义函数段
#define repf(i,a,b) for(int i =(a);i<(b);i++)
using namespace std;

struct mouse{
public :
    int num ;
    int weight;
    int speed ;
};

bool cmp(mouse a ,mouse b )
{
    if(a.weight==b.weight)
        return a.speed>b.speed;
    return a.weight<b.weight;
}
struct node{
public :
    int num ;//记录之前有多少个符合要求的mouse
    int pre;
} dp[1000];

mouse mice[1000];
int main() {

   int index = 0 ;
   while(cin>>mice[index].weight&&cin>>mice[index].speed)
   {
       mice[index].num=index+1;
       index ++ ;
   }
   repf(i,0,1000)
   {
       dp[i].num = 1;//符合上述要求的并且包括自己的这个串上有多少个老鼠
       dp[i].pre = 0;
   }

   sort(mice,mice+index,cmp);
   int Max = 0 ,beginIndex;
   repf(i,0,index)
   {
       repf(j,0,i)
       {
           //判断是不是辐射最上层的要求
           if(mice[j].speed>mice[i].speed&&mice[j].weight<mice[i].weight)
           {
               //看看长度如果小的话,那么就可以加
               if(dp[i].num<dp[j].num+1)
               {
                   //更新最长节点数
                   dp[i].num=dp[j].num+1;
                   //更新上一个老鼠的位置
                   dp[i].pre=j;
               }
           }
       }
       //更新最大值
       if(dp[i].num>Max)
       {
           Max=dp[i].num;
           beginIndex = i ;
       }
   }
//这个其实完全没必要,直接一个循环,就是结果。
   int m[1000];
   repf(k,0,Max)
   {
       m[k] = beginIndex;
       beginIndex = dp[beginIndex].pre;
   }
   //输出个数
   cout << Max<<endl;
   //输出路径
   for(int k = Max-1;k>=0;k--)
   {
       cout << mice[m[k]].num<<endl;
   }


    return 0;
}




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值