UESTC 1218 Pick The Sticks (2015 CCPC)

题目链接

题意就是给你一块长为l的木板,然后有n个木棍,木棍有长度,有价值,可以放在木板上,只要它超出木棍的的长度不超过他自己长度的二分之一,它就可以放上去。

看大家对背包问题的的理解,很明显加一维状态,表示放在边缘没。

下面是代码
细节就是背包边缘的处理

#include <cstring>
#include <cmath>
#include <algorithm>
#include <cstdio>
#include <iostream>
#include <map>
#define LL long long
using namespace std;

LL dp[2][8010][3];
LL w[4005],v[4005];

int main()
{
    int t,kase = 1;
    scanf("%d",&t);
    while(t--){
        memset(dp,0,sizeof(dp));
        int l,n;
        scanf("%d%d",&n,&l);
        l *= 2;
        for(int i=0;i<n;i++){
            scanf("%lld%lld",&w[i],&v[i]);
            w[i] *= 2;
        }
        int now = 1 , pre = 0;
        for(int i=0;i<n;i++){

            for(int j=0;j<=l;j++){
                dp[now][j][0] = dp[pre][j][0];
                dp[now][j][1] = dp[pre][j][1];
                dp[now][j][2] = dp[pre][j][2];
            }

            for(int j=l;j>=w[i];j--){
                dp[now][j][0] = max(dp[pre][j-w[i]][0] + v[i],dp[now][j][0]);
                dp[now][j][1] = max(dp[pre][j-w[i]][1] + v[i],dp[now][j][1]);
                dp[now][j][2] = max(dp[pre][j-w[i]][2] + v[i],dp[now][j][2]);
            }

            for(int j=l;j>=w[i]/2;j--){
                dp[now][j][1] = max(dp[now][j][1],dp[pre][j-(w[i]/2)][0] + v[i]); // 这里很关键
                dp[now][j][2] = max(dp[now][j][2],dp[pre][j-(w[i]/2)][1] + v[i]); // 这里很关键
            }
            swap(now,pre);
        }
        LL ans = dp[pre][l][0];
        ans = max(ans,dp[pre][l][1]);
        ans = max(ans,dp[pre][l][2]);
        for(int i=0;i<n;i++) ans = max(ans,v[i]);
        printf("Case #%d: ",kase++);
        printf("%lld\n",ans);

    }
    return 0;
}

总之这题算是2015年CCPC的铜牌题。
加油!!!!!!

互联网络程序设计是指在互联网上进行程序开发和设计的过程。UESTC则是我国的一所著名高校——电子科技大学。 互联网络程序设计 uestc包含了两个主要的方面:互联网络和程序设计。互联网络是指将多个计算机网络通过通信链路互相连接起来,实现信息共享和资源共享的网络系统。程序设计是指根据需求和目标,通过编写代码和设计算法,实现计算机程序的过程。 互联网络程序设计 uestc的学习内容主要包括以下几个方面: 1. 网络知识:学习互联网络的基本概念、原理和协议,如TCP/IP协议、HTTP协议等。掌握网络编程的基本技术,能够编写网络应用程序。 2. 数据通信:学习数据通信的基本原理和技术,包括数据传输的方式、数据压缩和加密等。了解网络安全和数据保护的基本知识。 3. 程序设计:学习编程语言和开发工具,如Java、C++和Python等。掌握常用的编程技巧和方法,能够设计和实现复杂的网络应用程序。 4. Web开发:学习Web开发的基本知识和技术,包括HTML、CSS、JavaScript等。能够设计和实现交互式的Web应用程序。 5. 数据库技术:学习数据库的基本原理和技术,如SQL语言和数据库管理系统。能够设计和管理数据库,实现数据的存储和检索。 通过学习互联网络程序设计 uestc,可以掌握互联网应用开发的基本技能,具备设计和实现网络应用程序的能力。这对于目前互联网行业的人才需求来说是非常重要的,也为学生提供了广阔的就业和创业机会。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值