原题入下:
题目大意:
给你一些木头,然后你就是要切割他们,但是他们的长度和重量各不相同,如果切割的后一个木头的长度比前一个木头的长度重量都要小,那么就不用修改设置时间,简单点说就是,这两个木头可以看做是一个木头只要不超过集合中某个木头的参数就可以将他们看做一个木头
贪心策略就是:
我让这些木头按照长度来升序排列,如果长度相同那我就按重量升序排列,
然后呢
说简单点,我就是要找着一个各个参数都大的木头,他能够包含其他的木头,我把被包含进去的木头用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