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

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

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

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

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

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

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

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

 #include <bits/stdc++.h>
using namespace std;
#define N 10010
#define repu(i,a,b) for(int i=a;i<b;i++)
#define ll long long
int c[N],a[N];
int main()
{
int n,m,b,kase = ,ok = ;
while(scanf("%d%d",&n,&m)&&n&&m)
{
vector<int> s;
s.clear();
repu(i,,n)
scanf("%d",&a[i]),s.push_back(a[i]);
repu(i,,n)
{
repu(j,i,n)
if(a[i]+a[j] <= m)
s.push_back(a[i]+a[j]);
}
sort(s.begin(),s.end());
int ans = ;
repu(i,,s.size())
{
int st = i,ed = s.size() - ;
while(st <= ed)
{
int mid = (st + ed) /;
if(s[mid] + s[i] > m)
ed = mid -;
else
{
if(s[i] + s[mid] > ans)
ans = s[i] + s[mid];
st = mid + ;
}
}
}
printf("Case %d: %d\n\n",kase++,ans);
}
return ;
}

Great Number

 #include <cstdio>
#include <cstring>
#include <cstdlib>
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
#define N 1000005
#define ll long long struct App
{
ll s, p;
double k;
bool operator < (const App& rhs) const
{
return k < rhs.k;
}
} app[]; double d[N];
int main()
{
int T;
scanf("%d", &T);
ll v;
ll q = ;
for(int cases = ; cases <= T; cases++)
{
memset(d, , sizeof(d));
for(int i = ; i < ; i++) {
scanf("%lld%lld", &app[i].s, &app[i].p);
app[i].k = (double)app[i].p / (double)app[i].s;
}
scanf("%lld", &v);
sort(app, app + ); ll t = ;
//printf("t : %lld\n", max(v, 1000000ll));
if(v > q) {
//printf("t : %lld\n", v);
t = (v - q) / app[].s + 1ll;
v -= t * app[].s;
}
//printf("%lld\n", app[2].s);
for(int i = ; i <= v; i++)
for(int j = ; j < ; j++)
if(i - app[j].s >= )
d[i] = max((double)d[i - app[j].s] + (double)app[j].p, d[i]); printf("Case %d: %.0lf\n", cases, d[v] + (double)t * (double)app[].p);
}
return ;
}

完全背包+优化

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. hdu--(1247)Hat’s Words(trie树)

    Hat’s Words Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total ...

  2. 呆呆的io流输入输出的一些基础

    关于io流的File类,下面来码一些基础属性: 文件的属性: /* public String getName() 获取文件的名字 public boolean canRead() 判断文件是否可以读 ...

  3. 84. Largest Rectangle in Histogram *HARD* -- 求柱状图中的最大矩形面积

    Given n non-negative integers representing the histogram's bar height where the width of each bar is ...

  4. ScrollView嵌套StackView提示需要宽度和高度限制

    场景: 在一个xib的view中,添加一个ScrollView,再在这个ScrollView中添加一个StackView,StackView中不加控件(用代码动态加). 问题: 提示ScrollVie ...

  5. Android实现Activity页面跳转切换动画特效

    了解Android程序设计的人应该知道,在Android 2.0之后有了overridePendingTransition(),其中里面两个参数,一个是前一个activity的退出,另一个activi ...

  6. 语句--分支语句if case

    语句是指程序命令,都是按照顺序执行的.语句在程序中的执行顺序称为“控制流”或者“执行流”.根据程序对运行时所收到的输入的响应,在程序每次运行时控制流可能有所不同. 语句可以嵌套,可以是以分号结尾的单行 ...

  7. Axis2 webservice入门--开发环境搭建,概念理解

    关于webservice的概念,网上有各种解释,但是不太好懂. 可以这样理解:1.一个webservice就是一个“功能”,只是这个功能是别人写好的,被放在别人的网站上.                ...

  8. NOIP2005 等价表达式 解题报告

    明明进了中学之后,学到了代数表达式.有一天,他碰到一个很麻烦的选择题.这个题目的题干中首先给出了一个代数表达式,然后列出了若干选项,每个选项也是一个代数表达式,题目的要求是判断选项中哪些代数表达式是和 ...

  9. UITableViewCell 单元格样式

    UITableViewCell 单元格样式作用 typedef NS_ENUM(NSInteger, UITableViewCellStyle) { UITableViewCellStyleDefau ...

  10. Web体系=资源+URI+表示

    概述 Web有三个核心概念:资源(Resource).URI(UniformResource Identifer,统一资源标识符).表示(Representation).一个资源由一个URI进行标识. ...