题目传送门

题意:长度为L的金条,将n根金棍尽可能放上去,要求重心在L上,使得价值最大,最多有两条可以长度折半的放上去。

分析:首先长度可能为奇数,先*2。然后除了两条特殊的金棍就是01背包,所以dp[now][j][k]表示当前状态,长度为j,使用了k条特殊金棍获得的最大价值,需要对内存和时间优化。

/************************************************* Author        :Running_Time* Created Time  :2015/10/21 星期三 11:55:40* File Name     :D.cpp************************************************/
#include <bits/stdc++.h>
using namespace std;#define lson l, mid, rt << 1
#define rson mid + 1, r, rt << 1 | 1
typedef long long ll;
const int N = 1e3 + 10;
const int L = 4e3 + 10;
const int INF = 0x3f3f3f3f;
const int MOD = 1e9 + 7;
const double EPS = 1e-8;
ll dp[2][L][3];
struct P    {int a;ll v;
}p[N];ll Max(ll a, ll b)    {return a > b ? a : b;
}int main(void)    {int T, cas = 0; scanf ("%d", &T);while (T--) {int n, l;   scanf ("%d%d", &n, &l);l *= 2;ll ans = 0;for (int i=1; i<=n; ++i)    {scanf ("%d%lld", &p[i].a, &p[i].v);p[i].a *= 2;ans = max (ans, p[i].v);}memset (dp, 0, sizeof (dp));int now = 1;for (int i=1; i<=n; ++i)    {now = 1 - now;for (int j=0; j<=l; ++j)   {for (int k=0; k<3; ++k) {dp[now][j][k] = dp[1-now][j][k];}}for (int j=l; j>=p[i].a/2; --j) {for (int k=0; k<3; ++k) {if (j >= p[i].a)    dp[now][j][k] = max (dp[now][j][k], dp[1-now][j-p[i].a][k] + p[i].v);if (k)  dp[now][j][k] = max (dp[now][j][k], dp[1-now][j-p[i].a/2][k-1] + p[i].v);}}for (int i=0; i<2; ++i) {for (int j=0; j<=l; ++j) {for (int k=0; k<3; ++k) ans = max (ans, dp[i][j][k]);}}}printf ("Case #%d: %lld\n", ++cas, ans);}return 0;
}

  

转载于:https://www.cnblogs.com/Running-Time/p/4923761.html

DP(01背包) UESTC 1218 Pick The Sticks (15CCPC C)相关推荐

  1. uestc oj 1218 Pick The Sticks (01背包变形)

    题目链接:http://acm.uestc.edu.cn/#/problem/show/1218 给出n根木棒的长度和价值,最多可以装在一个长 l 的容器中,相邻木棒之间不允许重叠,且两边上的木棒,可 ...

  2. Codeforces Round #104 (Div. 2) E DP(01背包模型) +组和+除法取模求逆元

    题意: 规定只包含4或7的数为幸运数字,给定n个数的序列,求他的子序列,使得该子序列的长度为k并且满足该子序列中不存在相同的两个幸运数字.问一共寻在多少种可能.(只要该数的下标不同则认为是不同的序列) ...

  3. ☆【UVA - 624 】CD(dp + 0-1背包 + 记录路径)

    题干: You have a long drive by car ahead. You have a tape recorder, but unfortunately your best music ...

  4. HDU 1864 最大报销额 (dp 01背包)

    最大报销额 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Subm ...

  5. 最大报销额 HDU - 1864(DP+01背包)

    最大报销额 HDU - 1864 点击跳转↑ 题设:多组输入,每组输入一对Q和N,分别代表当前的公费,和需要报销的账单总数.接下来N行,每行开始一个m,接下来是m项物品的名称和价格.求:在所有符合报销 ...

  6. 【DP|01背包】AHU-603 LOL系列之蒙多的春天

    LOL系列之蒙多的春天 Time Limit: 1000 ms   Case Time Limit: 1000 ms   Memory Limit: 64 MB Description 蒙多最近运气太 ...

  7. [DP][01背包]积木城堡

    动态规划 积木城堡 时间限制: 1 Sec 内存限制: 128 MB 题目描述 XC的儿子小XC最喜欢玩的游戏用积木垒漂亮的城堡.城堡是用一些立方体的积木垒成的,城堡的每一层是一块积木.小XC是一个比 ...

  8. 洛谷P1504 积木城堡【DP+01背包】【黄】

    Date:2022.02.27 题目描述 XC 的儿子小 XC 最喜欢玩的游戏用积木垒漂亮的城堡.城堡是用一些立方体的积木垒成的,城堡的每一层是一块积木. 小 XC 是一个比他爸爸 XC 还聪明的孩子 ...

  9. 强壮的ZZW (一维dp 01背包)

    题目描述 ZZW神牛想要通过吃东西变得强壮!于是他买了N(1<=N<=4000)件食物,每件食物有自己的体积V(1<=V<=400),以及可以为ZZW增加的强壮度D(1< ...

最新文章

  1. 哪些特征对我的机器学习模型影响最大?
  2. php mysql用户登录_php mysql实现用户登录功能的代码示例
  3. 谈谈一些有趣的CSS题目(十)-- 结构性伪类选择器
  4. 界面设计方法 (1) — 5. 表单功能的设计
  5. [BZOJ 4571][Scoi2016]美味(主席树)
  6. java 多态 显式隐式,Java 构造器中的显式参数和this隐式参数
  7. 商品详情页html代码获取,直播带货小程序源码中,商品详情页是如何获取html图片的...
  8. 收集了一些python的文章
  9. configure: error: Cannot find OpenSSL's libraries
  10. OCTO-RPC集成 Thrift 0.11.0
  11. 高等数学中一些数学定理和公式
  12. Java多线程系列--“JUC锁”03之 公平锁(一) (r)
  13. 计算机应用物联网应用技术论文,物联网的关键技术及计算机物联网的应用研究...
  14. 软件架构模式 mark Richards - 读后总结 3 - 微内核架构
  15. 【Quarkus】像子弹一样飞的启动速度之入门案例
  16. android图片裁剪器
  17. MATLAB编写遗传算法求解vrp问题
  18. 综合面试(hr面)常问的问题
  19. IxChariot - 6.70 下载
  20. 商业智能BI在信息化建设中到底处于一个什么位置?

热门文章

  1. 三维重建8:点云图像的滤波方法
  2. (上)挖掘传统行业日志大数据的无限价值
  3. 通过七牛云建立私有图床
  4. 《The Corporate Startup》作者访谈
  5. C++ StrCat()
  6. [转载]答《漫话ID》中的疑问:UniqueID和ClientID的来源
  7. session_id()和session_regenerate_id()对原来session文件和其中数据是怎么处理的
  8. jquery获取下拉框的值并传递给后端处理
  9. [LintCode] Simplify Path [字符串操作]
  10. bash下: () {} [] [[]] (())的解释