【Link】:http://acm.hdu.edu.cn/showproblem.php?pid=6140

【Description】



等价于告诉你有n个物品,每个物品的价值为-a[i]或a[i],或者这个物品可以看成两个物品一个为a[i]另外一个为-a[i];

问你能不能达到物品价值k

【Solution】



爆搜。

加个看起来不是很有用的剪枝就能过.

(记录某个位置后面所有的整数的和)

大数据的背包好像都能这样做。

(这题数据比较水??)

【另解】:

题目描述的上面有说a1=1,b1=’N’

也就是说-1..1都可以得到;

假设当前[L..R]都可以得到(L为负,R为正)

又来了一个数字x

假设x要加上,且x<=R,

则L..R+x都可以得到

假设x要减掉,且x<=|L|

则L-x..R都可以得到;

如果可加可减,且x<=min(|L|,R);

则L-x..R+x都可以得到;

上面那个很变态的不等式使得这些如果都成立了。。

【NumberOf WA】



1



【Reviw】



大数据背包用dfs



【Code】

#include <bits/stdc++.h>
using namespace std;
#define lson l,m,rt<<1
#define rson m+1,r,rt<<1|1
#define LL long long
#define rep1(i,a,b) for (int i = a;i <= b;i++)
#define rep2(i,a,b) for (int i = a;i >= b;i--)
#define mp make_pair
#define pb push_back
#define fi first
#define se second
#define ms(x,y) memset(x,y,sizeof x)
#define ri(x) scanf("%d",&x)
#define rl(x) scanf("%lld",&x)
#define rs(x) scanf("%s",x+1)
#define oi(x) printf("%d",x)
#define ol(x) printf("%lld",x)
#define oc putchar(' ')
#define os(x) printf(x)
#define all(x) x.begin(),x.end()
#define Open() freopen("F:\\rush.txt","r",stdin)
#define Close() ios::sync_with_stdio(0) typedef pair<int,int> pii;
typedef pair<LL,LL> pll; const int dx[9] = {0,1,-1,0,0,-1,-1,1,1};
const int dy[9] = {0,0,0,-1,1,-1,1,-1,1};
const double pi = acos(-1.0);
const int N = 2e3;
const int INF = 1e6+10; int n,k,tot;
int w[N+10],a[N+10],ma[N+10],mi[N+10];
char s[N+10][3]; bool dfs(int now,int sum){
if (sum == k) return true;
if (now > n) return false;
if (sum + ma[now] < k) return false;
if (sum + mi[now] > k) return false;
if (dfs(now+1,sum+w[now])) return true;
if (dfs(now+1,sum)) return true;
return false;
} int main(){
//Open();
//Close();
int T;
ri(T);
while (T--){
ri(n),ri(k);
rep1(i,1,n) ri(a[i]);
rep1(i,1,n) rs(s[i]);
tot = 0;
rep1(i,1,n){
if (a[i]==0) continue;
if (s[i][1]=='N'){
w[++tot] = a[i];
w[++tot] = -a[i];
}else
if (s[i][1]=='L')
w[++tot] = a[i];
else
w[++tot] = -a[i];
}
n = tot;
ma[n+1] = mi[n+1] = 0;
rep2(i,n,1){
ma[i] = ma[i+1],mi[i] = mi[i+1];
if (w[i]>0)
ma[i] += w[i];
if (w[i]<0)
mi[i] += w[i];
}
if (dfs(1,0))
puts("yes");
else
puts("no");
}
return 0;
}

【2017 Multi-University Training Contest - Team 8】Hybrid Crystals的更多相关文章

  1. 【2017 Multi-University Training Contest - Team 2】TrickGCD

    [Link]:http://acm.hdu.edu.cn/showproblem.php?pid=6053 [Description] 给你一个b数组,让你求一个a数组: 要求,该数组的每一位都小于等 ...

  2. 【2017 Multi-University Training Contest - Team 2】Maximum Sequence

    [Link]:http://acm.hdu.edu.cn/showproblem.php?pid=6047 [Description] 给你一个数列a和一个数列b; 只告诉你a的前n项各是什么; 然后 ...

  3. 【2017 Multi-University Training Contest - Team 2】 Regular polygon

    [Link]: [Description] 给你n个点整数点; 问你这n个点,能够组成多少个正多边形 [Solution] 整点只能构成正四边形. 则先把所有的边预处理出来; 枚举每某两条边为对角线的 ...

  4. 【2017 Multi-University Training Contest - Team 2】 Is Derek lying?

    [Link]: [Description] 两个人都做了完全一样的n道选择题,每道题都只有'A','B','C' 三个选项,,每道题答对的话得1分,答错不得分也不扣分,告诉你两个人全部n道题各自选的是 ...

  5. 【2017 Multi-University Training Contest - Team 5】Rikka with Competition

    [Link]: [Description] [Solution] 把所有人的能力从大到小排; 能力最大的肯定可能拿冠军; 然后一个一个地往后扫描; 一旦出现a[i-1]-a[i]>k; 则说明从 ...

  6. 【2017 Multi-University Training Contest - Team 5】Rikka with Subset

    [Link]: [Description] 给你a数组的n个数的所有2^n个子集的2^n个子集元素的和; 子集元素的和最大为m; 告诉你各个子集元素的和出现的次数; 如 1 2 则0出现1次,1出现1 ...

  7. 【2017 Multi-University Training Contest - Team 5】Rikka with Graph

    [Link]:http://acm.hdu.edu.cn/showproblem.php?pid=6090 [Description] 给你n个点; 让你在这n个点上最多连m条无向边; 使得 ∑ni= ...

  8. 【2017 Multi-University Training Contest - Team 4】Time To Get Up

    [Link]: [Description] [Solution] 把每个数字长什么样存到数组里就好;傻逼题. (直接输入每一行是什么样子更快,不要一个字符一个字符地输入) [NumberOf WA] ...

  9. 【2017 Multi-University Training Contest - Team 4】Counting Divisors

    [Link]:http://acm.hdu.edu.cn/showproblem.php?pid=6069 [Description] 定义d(i)为数字i的因子个数; 求∑rld(ik) 其中l,r ...

随机推荐

  1. web,xmlSecurity

    <?xml version="1.0" encoding="UTF-8"?><web-app xmlns:xsi="http://w ...

  2. 【Flutter学习】之绘画实例(一)

    一,概述 画布(Canvas) 画布是一个矩形区域,我们可以控制其每一像素来绘制我们想要的内容 Canvas 拥有多种绘制点.线.路径.矩形.圆形.以及添加图像等的方法,结合这些方法我们可以绘制出千变 ...

  3. [CSP-S模拟测试53]题解

    A.u 只涉及到区间修改可以考虑差分,然而如果每一行都差分复杂度还是过高.我们发现差分标记也是连续的(一行横着的一行斜着的),所以可以维护两个 差分的差分,扫两遍统计即可. #include<c ...

  4. djanjo中url路由匹配规则是啥意思

    一,django路由匹配规则的本质是通过正则表达式对用户的url进行匹配. 1,r 是正则表达式中防止转义的符号,例如在python/n代表换行,加上r就不换行了. 2,$ 正则表达式中表示以什么什么 ...

  5. (转)图文详解MyEclipse中新建Maven webapp项目的步骤

    转:https://blog.csdn.net/ClementAD/article/details/46592557 MyEclipse中创建新的Maven项目(webapp目录结构)过程如下:   ...

  6. 微服务架构 技能图谱skill-map

    # 微服务架构 技能图谱 ## 理论基础### 概念#### 多微合适 - 非代码函数 - 非重写时间 - 适合团队最重要 - 独立业务属性 - 全功能团队 #### 进程隔离 - 服务运行在独立的进 ...

  7. 2的N次方求解-----C++

    2的N次方求解,一般情况如果不超出C/C++基本数据类型的表达范围,这个问题及其容易,但是如果N的值十分的大,以致于超出基本数据类型表达范围 下面的程序正是解决2的N次方这个大数精确求解的源码 #in ...

  8. 8. Jmeter导入jar包

    我们都知道Jmeter是Java编写的,所以有很多时候需要用到Java方面的知识.比如Jmeter前置处理器,就用到了很多Java知识.那么本章我们先介绍如何使用Jmeter导人jar包. 工具准备 ...

  9. 2019山东省ACM省赛菜鸡的赛后总结

    省赛总结 2019-05-13 21:27:40 虽然第一次就死的这么难看,但是的确发现了很多问题,我想这是未来我和我的队友要解决的,而不是去难过,去感慨自己是有多菜.在大一训练结束马上参加暑假集训的 ...

  10. camunda流程部署的一些简单操作

    act_re_deployment:(流程部署对象表)存放流程部署的显示名和部署时间 act_re_procdef:(流程定义表)存放流程定义的属性信息 act_ge_bytearray:(资源文件表 ...