HDU1051wooden sticks

原题入下:
在这里插入图片描述

题目大意:
给你一些木头,然后你就是要切割他们,但是他们的长度和重量各不相同,如果切割的后一个木头的长度比前一个木头的长度重量都要小,那么就不用修改设置时间,简单点说就是,这两个木头可以看做是一个木头只要不超过集合中某个木头的参数就可以将他们看做一个木头
贪心策略就是:
我让这些木头按照长度来升序排列,如果长度相同那我就按重量升序排列,
然后呢
说简单点,我就是要找着一个各个参数都大的木头,他能够包含其他的木头,我把被包含进去的木头用0来覆盖,我能找着多少个不同的能包含别的木头的木头,那么它的个数就是答案。
不知道有没有说清楚
看看代码??


#include<stdio.h>
#include<algorithm>
using namespace std;
struct node
{
	int l, w;
}f[5050];
bool cmp(node a, node b)
{
	if (a.l == b.l)
		return a.w < b.w;
	else
		return a.l < b.l;
}
int main()
{
	int t, n;
	scanf_s("%d", &t);
	while (t--)
	{
		int ans = 0;
		scanf_s("%d", &n);
		for (int i = 0; i < n; i++)
			scanf_s("%d%d", &f[i].l, &f[i].w);
		sort(f, f + n, cmp);
		for (int i = 0; i < n; i++)
		{
			if (f[i].l && f[i].w)
			{
				for (int j = i + 1; j < n; j++)
				{
					if (f[i].w <= f[j].w)
					{
						f[i].l = f[j].l;
						f[i].w = f[j].w;
						f[j].w = 0, f[j].l = 0;
					}
				}
				ans++;
			}
		}
		printf("%d\n", ans);
	}
	return 0;
}

5000*5000不太可能超时,那就暴力一点
哈哈哈我真菜;
md

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值