题意:输出一组数列,小鼠的体重增加,速度减少,保证这组数列数量最多。
思路:其实是很经典的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

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

被折叠的 条评论
为什么被折叠?



