题意:给你n个数,在里面取4个数,可以重复取数,使和不超过M,求能得到的最大的数是多少;

思路:比赛时,和之前的一个题目很像,一直以为是体积为4(最多选择四次)的完全背包,结果并不是,两两求和,然后二分枚举;

完全背包是固定的体积,然后尽量使得装下的重量最大;

这个题目是固定的体积,但求在不超过该重量的情况下能得到的最大值。

至于为啥不是完全背包到现在还找到一个反例,以后再修改;

不过看到一共选择四次的时候,就应该想到是暴力。。。

比较相似的一个题目,12年的省赛题目:http://acm.sdut.edu.cn/sdutoj/problem.php?action=showproblem&problemid=2408

那个是10的8次方,也是优化之后才能背包,将10的6次方的那部分先减掉,因为它是不限制取的次数的

  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. #define N 10010
  4. #define repu(i,a,b) for(int i=a;i<b;i++)
  5. #define ll long long
  6. int c[N],a[N];
  7. int main()
  8. {
  9. int n,m,b,kase = ,ok = ;
  10. while(scanf("%d%d",&n,&m)&&n&&m)
  11. {
  12. vector<int> s;
  13. s.clear();
  14. repu(i,,n)
  15. scanf("%d",&a[i]),s.push_back(a[i]);
  16. repu(i,,n)
  17. {
  18. repu(j,i,n)
  19. if(a[i]+a[j] <= m)
  20. s.push_back(a[i]+a[j]);
  21. }
  22. sort(s.begin(),s.end());
  23. int ans = ;
  24. repu(i,,s.size())
  25. {
  26. int st = i,ed = s.size() - ;
  27. while(st <= ed)
  28. {
  29. int mid = (st + ed) /;
  30. if(s[mid] + s[i] > m)
  31. ed = mid -;
  32. else
  33. {
  34. if(s[i] + s[mid] > ans)
  35. ans = s[i] + s[mid];
  36. st = mid + ;
  37. }
  38. }
  39. }
  40. printf("Case %d: %d\n\n",kase++,ans);
  41. }
  42. return ;
  43. }

Great Number

  1. #include <cstdio>
  2. #include <cstring>
  3. #include <cstdlib>
  4. #include <iostream>
  5. #include <vector>
  6. #include <algorithm>
  7. using namespace std;
  8. #define N 1000005
  9. #define ll long long
  10.  
  11. struct App
  12. {
  13. ll s, p;
  14. double k;
  15. bool operator < (const App& rhs) const
  16. {
  17. return k < rhs.k;
  18. }
  19. } app[];
  20.  
  21. double d[N];
  22. int main()
  23. {
  24. int T;
  25. scanf("%d", &T);
  26. ll v;
  27. ll q = ;
  28. for(int cases = ; cases <= T; cases++)
  29. {
  30. memset(d, , sizeof(d));
  31. for(int i = ; i < ; i++) {
  32. scanf("%lld%lld", &app[i].s, &app[i].p);
  33. app[i].k = (double)app[i].p / (double)app[i].s;
  34. }
  35. scanf("%lld", &v);
  36. sort(app, app + );
  37.  
  38. ll t = ;
  39. //printf("t : %lld\n", max(v, 1000000ll));
  40. if(v > q) {
  41. //printf("t : %lld\n", v);
  42. t = (v - q) / app[].s + 1ll;
  43. v -= t * app[].s;
  44. }
  45. //printf("%lld\n", app[2].s);
  46. for(int i = ; i <= v; i++)
  47. for(int j = ; j < ; j++)
  48. if(i - app[j].s >= )
  49. d[i] = max((double)d[i - app[j].s] + (double)app[j].p, d[i]);
  50.  
  51. printf("Case %d: %.0lf\n", cases, d[v] + (double)t * (double)app[].p);
  52. }
  53. return ;
  54. }

完全背包+优化

UVA 题意:给固定体积,告诉你两种物品的体积,以及他们的价值,求最多能装的价值是多大;
看似像背包,但是可以暴力做,2次枚举同时,i个s1,i个s2,同时比较,保留大的,i循环100000就够了
误解:记得之前做过,队友说看比例,即第一个物体和第二个物体比较性价比,谁的高先留谁,装不下了再考虑第二个物体,之前我很赞同,现在有反例了:9 2 5 3 7(总体积,第一物体体积,价值,第二物体体积,价值)这组样例正确答案是21,但是按照上边的思路得出的是20,因为先考虑的是第一个,所以还是应该枚举。这样想,已经在两个题目上验证是错误的,应该放弃这种思想了。。。

10年省赛-Greatest Number (二分+暴力) + 12年省赛-Pick apples(DP) + UVA 12325(暴力-2次枚举)的更多相关文章

  1. [2012山东ACM省赛] Pick apples (贪心,完全背包,枚举)

    Pick apples Time Limit: 1000MS Memory limit: 165536K 题目描述 Once ago, there is a mystery yard which on ...

  2. [2012山东ACM省赛] Pick apples (贪心,全然背包,枚举)

    Pick apples Time Limit: 1000MS Memory limit: 165536K 题目描写叙述 Once ago, there is a mystery yard which ...

  3. Greatest Number 山东省第一届省赛

    Greatest Number Time Limit: 1000ms   Memory limit: 65536K  有疑问?点这里^_^ 题目描述 Saya likes math, because ...

  4. SDUT2157——Greatest Number(STL二分查找)

    Greatest Number 题目描述Saya likes math, because she think math can make her cleverer.One day, Kudo invi ...

  5. 2019浙师大校赛(浙大命题)(upc复现赛)总结

    2019浙师大校赛(浙大命题)(upc复现赛)总结 早上九点开始.起得迟了,吃了早饭慌慌张张跑过去,刚到比赛就开始了. 开始分别从前往后和从后往前看题,一开始A题,第一发WA,第二次读题发现漏看了还有 ...

  6. 12.25模拟赛T3

    可以发现,答案O(根号)(因为链上答案最大,n/2,n/3...根号种) 每次求答案要二分 优秀的做法是: 对于小于根号n的暴力nlogn找,可能二分到同一个mid,记忆化一下最小的tot值 对于大于 ...

  7. 「状压DP」「暴力搜索」排列perm

    「状压DP」「暴力搜索」排列 题目描述: 题目描述 给一个数字串 s 和正整数 d, 统计 sss 有多少种不同的排列能被 d 整除(可以有前导 0).例如 123434 有 90 种排列能被 2 整 ...

  8. 2014辽宁省赛 Repeat Number

    问题 C: Repeat Number 时间限制: 1 Sec  内存限制: 128 MB [cid=1073&pid=2&langmask=0">提交][状态][论坛 ...

  9. hdu 4004 二分 2011大连赛区网络赛D

    题意:一个长为L的河,中间有n个石子,小青蛙需要跳少于m次过河,判断小青蛙每次跳跃最大距离的最小值 最大值最小,用二分 Sample Input 6 1 2 2 25 3 3 11 2 18 Samp ...

随机推荐

  1. (14)odoo加载机制

    Odoo的启动通过openerp-server脚本完成,它是系统的入口. 然后加载配置文件openerp-server.conf 或者 .openerp_serverrc: openerp-serve ...

  2. SAP采购订单审批记录增强

    采购订单审核函数: BAPI_PO_RELEASE 结尾加上 ENHANCEMENT ZME28_PO. "active version DATA:LS_EKKO TYPE EKKO. DA ...

  3. 5 echo展开

    一.(字符)展开 1.echo在标准输出中打印出他的文本 echo this is a test 输出 this is a test 2.输出通配符时,比如*代表匹配文件名的任何字符 echo * 输 ...

  4. [转载]linux下svn常用指令

    一下内容转载于:http://blog.chinaunix.net/space.php?uid=22976768&do=blog&id=1640924.这个总结的很好~ windows ...

  5. loadrunner 如何做关联

    在页面中为了防止CRSF攻击,每次访问登录页面时,在浏览器器端生成一个token. 在提交时检验这个token是否有效,提交后token自动失效.   如果使用loadrunner来测试此系统话需要做 ...

  6. HADOOP 2架构图

    HDFS 2 architecture YARN architecture

  7. PHP安装pthreads多线程扩展教程[windows篇]

    from:http://blog.csdn.net/aoyoo111/article/details/19020161 一.判断PHP是ts还是nts版 通过phpinfo(); 查看其中的 Thre ...

  8. ZOJ 2477 Magic Cube 暴力,模拟 难度:0

    http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=1477 用IDA*可能更好,但是既然时间宽裕数据简单,而且记录状态很麻烦,就直接 ...

  9. sdut 2605 A^X mod P

    http://acm.sdut.edu.cn/sdutoj/problem.php?action=showproblem&problemid=2605 这个题卡的是优化,直观解法是在求x^y时 ...

  10. WDCP安装常用组件(memcache、mysqli、PDO_MYSQL、mysql innodb、libmcrypt、php zip)的方法

    为有更好的性能,也为更简洁的系统,一些不是常用或不是基本的功能,都将做为可选的安装组件需要用到的就安装 注意:如果安装时遇到 ./configure: Permission denied提示,很有可能 ...