题目描述

正在入侵艾泽拉斯的古尔丹偶然间得到了一颗邪能炸弹,经过研究,他发现这是一颗威力极其巨大且难以控制的炸弹。但是精通邪能的古尔丹突然有了一个大胆的想法,他对炸弹进行了一些小小的改造。这使得炸弹需要n天的充能才能爆炸,在这n天中,每天炸弹的邪能值都会产生波动,波动值为xi,古尔丹唯一能控制的是使邪能值增加xi或减少xi,如果邪能值小于0或大于MAX,那么炸弹将会损坏并失效。机智如古尔丹当然会做出最优选择。而作为反抗军的情报人员,你知道炸弹的初始邪能值为begin,寿命为n天以及每天的波动值xi。你需要知道在第n天炸弹可能达到的最大邪能值。

输入

第一行为一个整数T,表示有T组测试实例。
对于测试实例:
第一行为三个整数 n,begin,MAX。1<=n<=50,0<=begin<=MAX,1<=MAX<=1000。
第二行一次为n个整数 x1,x2,x3,x4...xn。1<=xi<=1000

输出

对于每组测试实例输出一行,表示第n天炸弹可能达到的最大邪能值,如果炸弹无法避免邪能值低于0或者高于MAX则输出-1。

样例输入

  1. 2
  2. 3 5 10
  3. 5 3 7
  4.  
  5. 3 3 8
  6. 5 2 10

样例输出

  1. 10
  2. -1
  3.  
  4. 思路:当时的写的是dfs ac 可以构造一颗搜索树 然后搜索就好了
       题解是用的dp dp[i][j]为第i天时值为j的存在状态 1为存在 0为不存在 如果dp[i-1][j] = 1 那么可由此推出dp[i][j + Xi] dp[i][j - Xi]的存在状态
       ji-1i阶段取值0Max内都不存在的话 直接可以返回-1
    dfs:
  1. #include <iostream>
  2. #include <stdio.h>
  3. #include <queue>
  4. using namespace std;
  5. int a[];
  6. int n, b, Max;
  7. int ans;
  8.  
  9. void dfs(int ret, int t)
  10. {
  11. if (ret < || ret > Max)
  12. return;
  13. if (t == n) {
  14. ans = max(ans, ret);
  15. return;
  16. }
  17. dfs(ret+a[t], t+);
  18. dfs(ret-a[t], t+);
  19. }
  20.  
  21. int main()
  22. {
  23. //freopen("1.txt", "r", stdin);
  24. int T;
  25. scanf("%d", &T);
  26. while (T--) {
  27. ans = -;
  28. scanf("%d%d%d", &n, &b, &Max);
  29. for (int i = ; i < n; i++)
  30. scanf("%d", &a[i]);
  31. dfs(b, );
  32. printf("%d\n", ans);
  33. }
  34.  
  35. return ;
  36. }
  1. dp:
  1. #include <iostream>
  2. #include <stdio.h>
  3. #include <cstring>
  4. #include <algorithm>
  5. using namespace std;
  6. int dp[][];
  7. int n, b, Max;
  8. int x[];
  9.  
  10. int main()
  11. {
  12. //freopen("1.txt", "r", stdin);
  13. int T;
  14. scanf("%d", &T);
  15. while (T--) {
  16. scanf("%d%d%d", &n, &b, &Max);
  17. for (int i = ; i <= n; i++)
  18. scanf("%d", &x[i]);
  19. memset(dp, , sizeof(dp));
  20. dp[][b] = ;
  21. int flag;
  22. for (int i = ; i <= n; i++) {
  23. flag = ;
  24. for (int j = ; j <= Max; j++) {
  25. if (dp[i-][j]) {
  26. if (j + x[i] <= Max) {
  27. dp[i][j + x[i]] = ;
  28. flag = ;
  29. }
  30. if (j - x[i] >= ) {
  31. dp[i][j - x[i]] = ;
  32. flag = ;
  33. }
  34. }
  35. }
  36. if (flag == ) break;
  37. }
  38. int ans = -;
  39. for (int i = Max; i >= ; i--)
  40. if (dp[n][i]) {
  41. ans = i;
  42. break;
  43. }
  44. printf("%d\n", ans);
  45. }
  46.  
  47. return ;
  48. }
  1.  
  1.  

[haut] 1281: 邪能炸弹 dp的更多相关文章

  1. 河南省多校联盟二-C

    1281: 邪能炸弹 时间限制: 1 秒  内存限制: 128 MB提交: 222  解决: 80 题目描述 正在入侵艾泽拉斯的古尔丹偶然间得到了一颗邪能炸弹,经过研究,他发现这是一颗威力极其巨大且难 ...

  2. poj2228 Naptime【(环结构)线性DP】

    Naptime Time Limit: 1000MS   Memory Limit: 65536K Total Submissions:3374   Accepted: 1281 Descriptio ...

  3. HDU 5366 dp 递推

    The mook jong Accepts: 506 Submissions: 1281 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65 ...

  4. 51nod 1281山峰和旗子

    1281 山峰和旗子  题目来源: Codility 基准时间限制:1 秒 空间限制:131072 KB 分值: 40 难度:4级算法题 用一个长度为N的整数数组A,描述山峰和山谷的高度.山峰需要满足 ...

  5. BZOJ 1911: [Apio2010]特别行动队 [斜率优化DP]

    1911: [Apio2010]特别行动队 Time Limit: 4 Sec  Memory Limit: 64 MBSubmit: 4142  Solved: 1964[Submit][Statu ...

  6. 2013 Asia Changsha Regional Contest---Josephina and RPG(DP)

    题目链接 http://acm.hdu.edu.cn/showproblem.php?pid=4800 Problem Description A role-playing game (RPG and ...

  7. AEAI DP V3.7.0 发布,开源综合应用开发平台

    1  升级说明 AEAI DP 3.7版本是AEAI DP一个里程碑版本,基于JDK1.7开发,在本版本中新增支持Rest服务开发机制(默认支持WebService服务开发机制),且支持WS服务.RS ...

  8. AEAI DP V3.6.0 升级说明,开源综合应用开发平台

    AEAI DP综合应用开发平台是一款扩展开发工具,专门用于开发MIS类的Java Web应用,本次发版的AEAI DP_v3.6.0版本为AEAI DP _v3.5.0版本的升级版本,该产品现已开源并 ...

  9. BZOJ 1597: [Usaco2008 Mar]土地购买 [斜率优化DP]

    1597: [Usaco2008 Mar]土地购买 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 4026  Solved: 1473[Submit] ...

随机推荐

  1. 编译PHP扩展的通用方法

    以安装swoole扩展为例: 步骤1: wget  pecl.php.net/get/swoole-1.7.21.tgz  (下载swoole打包文件) 步骤2: tar zxvf swoole-1. ...

  2. Js基础之函数

    定义函数:我们使用function标签来定义函数 使用函数:JavaScript函数定义完毕是不能自动执行的,需要我们调用或者事件触发,比如点击事件,鼠标事件,键盘事件等. 下面我们以点击事件为例,调 ...

  3. sleep 和 usleep的实现方法

    一.sleep 和 usleep 1.不属于系统调用,是glibc 库函数实现的: 2.glibc函数库中通过调用内核的nanosleep实现的: 3.内核nanosleep通过调用 hrtimer_ ...

  4. Spring 自动注册及自动装配

    Spring支持三种注册Bean及装配Bean的方式: 显式地在Java代码中注册及装配 显示地在Xml文件中注册及装配 隐式地装配,即自动注册及装配 这三种方式可以混合使用.选择哪种更多地是看个人品 ...

  5. Redis事务和watch

    redis的事务 严格意义来讲,redis的事务和我们理解的传统数据库(如mysql)的事务是不一样的. redis中的事务定义 Redis中的事务(transaction)是一组命令的集合. 事务同 ...

  6. 杂项:UUID

    ylbtech-杂项:UUID UUID 是 通用唯一识别码(Universally Unique Identifier)的缩写,是一种软件建构的标准,亦为开放软件基金会组织在分布式计算环境领域的一部 ...

  7. bash姿势-没有管道符执行结果相同于管道符

    听起来比较别口: 直接看代码: shell如下: [root@sevck_linux ~]# </etc/passwd grep root root:x:::root:/root:/bin/ba ...

  8. tar命令解压jdk.tar.gz包 报错 gzip: stdin: not in gzip format

    转自:https://blog.csdn.net/LL_zhuo/article/details/44173355 遇到和这篇博文一样的问题了.用wget 从oracle官网下载jdk, http:/ ...

  9. UML在软件开发中各个阶段的作用和意义

    经典的软件工程思想将软件开发分成5个阶段:需求分析,系统分析与设计,系统实现,测试及维护五个阶段. 之所以如此,是因为软件开发中饣含了物和人的因素,存在着很大的不确定性,这使得软件工程不可能像理想的, ...

  10. python操作excel的读写

    1.下载xlrd和xlwt pip install xlwd pip install xlrd pip install xlutils 2.读写操作(已存在的excel) #-*- coding:ut ...