您的位置:首页 > 其它

HDOJ 1160 FatMouse's Speed 解题报告

2013-02-04 16:21 381 查看
动态规划,最长上升子序列。看代码吧,可能更容易懂。

#include <iostream>
#include <algorithm>
using namespace std;

struct State
{
int id;
int weight;
int speed;
int pre;
int num;
};

bool cmp(const State &a, const State &b)
{
if(a.weight!=b.weight)
return a.weight<b.weight;
else
return a.speed>b.speed;
}

void output(int x, State a[])
{
if(a[x].num!=1)
output(a[x].pre, a);
cout<<a[x].id<<endl;
}

int main()
{
State mouse[1001];
int i,j,max=0,n=0;
while(cin>>mouse
.weight>>mouse
.speed)
{
mouse
.num=1;
mouse
.id=n+1;
mouse
.pre=0;
n++;
}

sort(mouse,mouse+n,cmp);

for(i=1;i<n;i++)
for(j=0;j<i;j++)
if((mouse[i].num<mouse[j].num+1) && (mouse[i].weight>mouse[j].weight) && (mouse[i].speed<mouse[j].speed))
{
mouse[i].num=mouse[j].num+1;
mouse[i].pre=j;
if(mouse[i].num>=mouse[max].num)
max=i;
}

cout<<mouse[max].num<<endl;
output(max,mouse);
}


一开始笔者也是不会做的,网上看了大牛的代码。。。然后自己试着去理解,再自己写的代码。嗯,貌似比看书强。做了数塔,Max Sum,还有这题,对于动态规划还是一知半解,还得继续努力啊^_^
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: