hdu1160 FatMouse's Speed (dp,记录路径)

博客介绍了如何解决HDU1160问题,即找到一组使得小鼠体重增加、速度减少的数列,保证序列数量最多。该问题通过动态规划(dp)来解决,对数字进行排序后,找出最长递增子序列。同时,文章关注于在dp过程中记录路径,使用数组保存每一步的状态。在输出结果时,需要注意EOF条件。

题意:输出一组数列,小鼠的体重增加,速度减少,保证这组数列数量最多。

思路:其实是很经典的dp,一个数字排序好后,求最大递增数列,就是有很多细节问题,还有保存路径。用一个数组,把每一组数的前一组位置保留下来,最后用递归输出。

还有就是这道题必须eof才能输出结果,导致我的电脑总是看不到结果,凭运气A。。。


#include <iostream>
#include <cstdio>
#include <cmath>
#include <queue>
#include <stack>
#include <algorithm>
#include <cstring>
#include <utility>
#define ll long long
#define INF 0x3f3f3f3f

using namespace std;

int dp[1005];
int r[1005];
int dpmax=1,dpi;

struct node
{
	int m,s;
	int num;
}a[1005];

bool cmp(node x,node y)
{
	if(x.m<y.m)	return 1;
	else if(x.m==y.m && x.s>y.s) return 1;
	else return 0;
}

void p(int e)
{
	if(e==0) return;
	p(r[e]);	//e的前一个是r[e]
	printf("%d\n",a[e].num);
}

int main()
{
	int k=0;
	whi
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值