双塔DP。

dp[i][j]表示前i个物品,分成两堆(可以不全用),价值之差为j的时候,较小一堆的价值为dp[i][j]。

  1. #include<cstdio>
  2. #include<cstring>
  3. #include<cmath>
  4. #include<algorithm>
  5. using namespace std;
  6.  
  7. int dp[][ + ];
  8. int a[];
  9. int n, sum;
  10.  
  11. void read()
  12. {
  13. for (int i = ; i <= n; i++) scanf("%d", &a[i]);
  14. }
  15.  
  16. void work()
  17. {
  18. sum = ;
  19. for (int i = ; i <= n; i++) sum = sum + a[i];
  20. memset(dp, -, sizeof dp);
  21. int h; h = a[];
  22. dp[][h + sum] = dp[][ - h + sum] = dp[][sum] = ;
  23. for (int i = ; i <= n; i++)
  24. {
  25. h = a[i];
  26. for (int j = ; j <= sum*; j++) dp[i][j] = dp[i - ][j];
  27. for (int j = ; j <= sum*; j++)
  28. {
  29. if (dp[i - ][j] == -) continue;
  30.  
  31. int tmp = j - sum;
  32. if (tmp >= )
  33. {
  34. dp[i][h + tmp + sum] = max(dp[i][h + tmp + sum], dp[i - ][j]);
  35. dp[i][tmp - h + sum] = max(dp[i][tmp - h + sum], dp[i - ][j] + min(tmp, h));
  36. }
  37. else if (tmp<)
  38. {
  39. tmp = -tmp;
  40. dp[i][ - (tmp + h) + sum] = max(dp[i][ - (tmp + h) + sum], dp[i - ][j]);
  41. dp[i][h - tmp + sum] = max(dp[i][h - tmp + sum], dp[i - ][j] + min(tmp, h));
  42. }
  43. }
  44. }
  45. int ans = ;
  46. for (int i = ; i <= n; i++) ans = max(ans, dp[i][sum]);
  47. if (ans == ) printf("Sorry\n");
  48. else printf("%d\n", ans);
  49. }
  50.  
  51. int main()
  52. {
  53. while (~scanf("%d", &n))
  54. {
  55. read();
  56. if (n < ) break;
  57. if (n <=) printf("Sorry\n");
  58. else work();
  59. }
  60. return ;
  61. }

ZOJ 2059 The Twin Towers的更多相关文章

  1. ZOJ 2059 The Twin Towers(双塔DP)

    The Twin Towers Time Limit: 2 Seconds      Memory Limit: 65536 KB Twin towers we see you standing ta ...

  2. LightOJ1126 Building Twin Towers(DP)

    题目 Source http://www.lightoj.com/volume_showproblem.php?problem=1126 Description Professor Sofdor Al ...

  3. UVA 10066 The Twin Towers

    裸最长公共子序列 #include<time.h> #include <cstdio> #include <iostream> #include<algori ...

  4. UVA 10066 The Twin Towers(LCS)

    Problem B The Twin Towers Input: standard input Output: standard output Once upon a time, in an anci ...

  5. uva 10066 The Twin Towers (最长公共子)

    uva 10066 The Twin Towers 标题效果:最长公共子. 解题思路:最长公共子. #include<stdio.h> #include<string.h> # ...

  6. The Twin Towers zoj2059 DP

    The Twin Towers Time Limit: 2 Seconds      Memory Limit: 65536 KB Twin towers we see you standing ta ...

  7. UVA.10066 The Twin Towers (DP LCS)

    UVA.10066 The Twin Towers (DP LCS) 题意分析 有2座塔,分别由不同长度的石块组成.现在要求移走一些石块,使得这2座塔的高度相同,求高度最大是多少. 问题的实质可以转化 ...

  8. UVa 10192 - Vacation &amp; UVa 10066 The Twin Towers ( LCS 最长公共子串)

    链接:UVa 10192 题意:给定两个字符串.求最长公共子串的长度 思路:这个是最长公共子串的直接应用 #include<stdio.h> #include<string.h> ...

  9. zoj 4099 Extended Twin Composite Number

    Do you know the twin prime conjecture? Two primes  and  are called twin primes if . The twin prime c ...

随机推荐

  1. C++调用com控件方法

    转载自:http://blog.csdn.net/haijun286972766/article/details/6273414 最近要求做一个C++调用com组件的DEMO.由于自己对C++并无研究 ...

  2. Struts2龙之总结

    一.Struts2执行流程: 1.客户端初始化一个指向servlet容器(tomcat)的请求: 2.这个请求经过一系列过滤器(Filter): 3.接着StrutsPrepareAndExecute ...

  3. this的应用

    <!DOCTYPE HTML> <html> <head> <meta http-equiv="Content-Type" content ...

  4. HDU1102--Constructing Roads(最小生成树)

    Problem Description There are N villages, which are numbered from 1 to N, and you should build some ...

  5. java数组的引用

    数组属于应用型变量,因此两个相投类型的数组如果具有相同的引用,它们就有完全相同的元素 如: int a[]={1,2,3},b[]={4,5} 如果a=b;则a[]={4,5} public clas ...

  6. LightOJ 1370 Bi-shoe and Phi-shoe(欧拉函数)

    题意:题目给出一个欧拉函数值F(X),让我们求>=这个函数值的最小数N,使得F(N) >= F(X); 分析:这个题目有两种做法.第一种,暴力打出欧拉函数表,然后将它调整成有序的,再建立一 ...

  7. android touchEvent事件学习

    学习网址:http://www.apkbus.com/forum.php?mod=viewthread&tid=44296 1:Android Touch事件传递机制解析 android系统中 ...

  8. L4,an exciting trip

    expressions: a great number of 许多 in the centre of 在…的中部 sentences: I have just had breakfast. I hav ...

  9. 创建 AngularJS 自定义过滤器,带自定义参数

    Angularjs过滤器是 angularjs非常棒的特性之一.有朝一日,你可能需要使用自定义过滤器,幸运的是,你找到了这篇博文. 下面显示的是自定义过滤器长什么样子(请注意myfilter): &l ...

  10. Servlet程序开发--Servlet 与 表单

    servlet程序: doPost方法时为了防止表单提交时post方式的问题.否则只能处理get请求 package org.lxh.servletdemo ; import java.io.* ; ...