10154 - Weights and Measures

本文介绍了一种基于最长子序列的算法实现,该算法通过计算累积重量来确定小乌龟堆叠的最大层数。通过qsort函数对输入数据进行排序,并使用动态规划的方法更新最优解。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

描述:最长子序列,不过需要注意的是小乌龟的重量会依次加在下层的小乌龟身上,所以越往下,小乌龟所承受的重量越大
#include <cstdio>
#include <cstdlib>
#include <cstring>
int v[5610][2],arr[5610];
int cmp(const void *p1,const void *p2)
{
    int c = ((int *)p1)[1] - ((int *)p2)[1];
    if(c!=0) return c;
    return ((int *)p1)[0] - ((int *)p2)[0];
}
int max(int x,int y)
{
    return x>y?x:y;
}
int main()
{
   // freopen("a.txt","r",stdin);
    int len=0,sum=0;
    while(scanf("%d%d",&v[len][0],&v[len][1])!=EOF) len++;
    qsort(v,len,sizeof(v[0]),cmp);
    memset(arr,0x7f,sizeof(arr));
    arr[0]=0;
    for(int i=0; i<len; i++)
        for(int j=sum; j>=0; j--)
            if(v[i][1]>=arr[j]+v[i][0]&&arr[j+1]>arr[j]+v[i][0])
            {
                arr[j+1]=arr[j]+v[i][0];
                sum=max(sum,j+1);
            }
    printf("%d\n",sum);
    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值