标签:max 输出 ini RoCE mem alt main space sts
2
1
3
题目大意理解>
谷歌好评
一堆n根木棍。每个棒的长度和重量是预先已知的。这些木棒将由木工机械一一加工。机器需要准备一些时间(称为准备时间)来准备处理木棍。设置时间与清洁操作以及更换机器中的工具和形状有关。木工机的设置时间如下:
(a)第一个木棍的准备时间为1分钟。
(b)在处理长度为l和重量为w的棒之后,如果l <= l’并且w <= w’,则机器将不需要设置长度为l’和重量为w’的棒的设置时间。否则,将需要1分钟进行设置。
您将找到处理给定的n根木棍的最短准备时间。例如,如果您有五根长度和重量对分别为(9,4),(2,5),(1、2),(5、3)和(4,1)的摇杆,则最小设置时间应该是2分钟,因为有对(4,1),(5,3),(9,4),(1,2),(2,5)对的序列。
输入值
输入包含T个测试用例。在输入文件的第一行中给出了测试用例的数量(T)。每个测试用例由两行组成:第一行具有整数n,1 <= n <= 5000,代表测试例中木棍的数量,第二行包含2n个正整数l1,w1,l2, w2,…,ln,wn,每个大小最大为10000,其中li和wi分别是第i个木棍的长度和重量。 2n个整数由一个或多个空格分隔。
输出量
输出应包含以分钟为单位的最短建立时间,每行一条。
#include <cstdio>
#include <iostream>
#include <cstring>
#include <cmath>
#include <algorithm>
using namespace std;
const int maxn=5000+5;
int t,n,ans1,f[maxn];
struct Senorita{
int l,w;
}a[maxn];
bool comp1(Senorita A,Senorita B) {
if(A.l==B.l) return A.w<B.w;
return A.l<B.l;
}
int main() {
scanf("%d",&t);
while(t--) {
memset(a,0,sizeof(a));
memset(f,0,sizeof(f));
ans1=1;
scanf("%d",&n);
for(int i=1;i<=n;i++) {
scanf("%d%d",&a[i].l,&a[i].w);
f[i]=1;
}
sort(a+1,a+n+1,comp1);
for(int i=2;i<=n;i++) {
f[i]=1;
for(int j=1;j<i;j++) {
if(a[i].w<a[j].w&&f[i]<f[j]+1) {
f[i]=f[j]+1;
ans1=max(ans1,f[i]);
}
}
}
printf("%d\n",ans1);
}
return 0;
}
这些是我想说的吗,当然不是
最初测试的时候为了省略代码,直接在memset初始化的时候把f数组初始化成1,就不用了后面的赋值f了。然而问题就出在这里, 百度memset函数的时候发现好久没写把sizeof和赋的值写反了,设置的是全局变量没有影响。搜索联想里面写到memset只能初始化0和-1
所以,再让我们回顾一下这个函数,康康百度释义
一般情况初始化字符数组,依靠二进制赋值,int是四个字节,把每个位置都赋值,只支持0和1,故只能同时初始化 [00000000 00000000 00000000 00000000] 为0和 [11111111 11111111 11111111 11111111] 也就是-1。
标签:max 输出 ini RoCE mem alt main space sts
原文地址:https://www.cnblogs.com/1999-09-21Karry-erfs/p/12695408.html