HDU 1160 结构体与dp

原创 2015年07月08日 10:40:10
#include <bits/stdc++.h>
using namespace std;
const int MAX_V = 1005;
struct mice
{
	int n, s, w, dp, f;
	bool operator<(mice &p)
	{
		if (w != p.w) return w < p.w;
		else return s > p.s;
	}
};
int num, ans;
mice inp[MAX_V];
istream & operator>>(istream &is, mice &p)
{
	is >> p.w >> p.s;
	p.n = num + 1;
	p.dp = 1;
	p.f = -1;
	num++;
	return is;
}
void print(int ans)
{
	if (inp[ans].f != -1)
		print(inp[ans].f);
	cout << inp[ans].n << endl;
}
void solve()
{
	for (int i = 1; i < num; i++)
	{
		for (int j = 0; j < i; j++)
			if (inp[i].w > inp[j].w && inp[i].s < inp[j].s && inp[i].dp < inp[j].dp + 1)
			{
				inp[i].dp = inp[j].dp + 1;
				inp[i].f = j;
			}
		ans = (inp[i].dp >= inp[ans].dp ? i : ans);
	}
	cout << inp[ans].dp << endl;
	print(ans);
}
int main(int argc, char const *argv[])
{
	while (cin >> inp[num]);
	sort(inp, inp + --num);//因为读入eof,num比实际大1
	solve();
	return 0;
}
使用了递归来逆序输出。题目本质是最长下降子序列。
使用了结构体来保存dp;
更换了比较符号的写法,更简洁;
做这题花了很长时间,还是应该吧思路理清楚;
版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

hdu 1069 Monkey and Banana (结构体排序,也属于简单的dp)

Monkey and Banana Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Oth...

HDU 1160 FatMouse's Speed (dp+路径记录)

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

DP-HDU-1160-FatMouse's Speed

FatMouse’s SpeedTime Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) ...

(HDU - 1160)FatMouse's Speed(DP)

Time limit1000 msMemory limit32768 kBOSWindowsFatMouse believes that the fatter a mouse is, the fast...

hdu1160 dp+路径记录

FatMouse's Speed Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)...
  • zt_1995
  • zt_1995
  • 2016年01月16日 11:16
  • 141

hdu 1160 FatMouse's Speed【dp】

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

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

题意:输出一组数列,小鼠的体重增加,速度减少,保证这组数列数量最多。 思路:其实是很经典的dp,一个数字排序好后,求最大递增数列,就是有很多细节问题,还有保存路径。用一个数组,把每一组数的前一组位置...

J - FatMouse's Speed HDU - 1160——基础dp

Think: 1知识点:排序+最长上升子串+记录路径 2题意:寻找一个最长子串,使得重量w严格递增,速度c严格递减 3反思:注意排序后的路径记录和通过递归回溯输出路径vjudge题目链接以下为A...

HDU---1160-FatMouse's Speed (DP)

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

hdu1160 FatMouse's Speed 最长上升子序列以及记录路径 DP

 FatMouse's Speed Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Oth...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:HDU 1160 结构体与dp
举报原因:
原因补充:

(最多只允许输入30个字)