HDU5616 Jam's balance 动态规划
2016-03-11 17:40
183 查看
Jam's balance
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total Submission(s): 774 Accepted Submission(s): 374
Problem Description
Jim has a balance and N weights. (1≤N≤20)
The balance can only tell whether things on different side are the same weight.
Weights can be put on left side or right side arbitrarily.
Please tell whether the balance can measure an object of weight M.
Input
The first line is a integer T(1≤T≤5),
means T test cases.
For each test case :
The first line is N,
means the number of weights.
The second line are N number,
i'th number wi(1≤wi≤100) means
the i'th weight's weight is wi.
The third line is a number M. M is
the weight of the object being measured.
Output
You should output the "YES"or"NO".
Sample Input
1
2
1 4
3
2
4
5
Sample Output
NO
YES
YES
Hint
For the Case 1:Put the 4 weight alone
For the Case 2:Put the 4 weight and 1 weight on both side
题目大意:告诉你N个砝码,问能否测量出质量为M的物品。
分析:动态规划,对于前X个砝码,若能组合出质量为K的物品,则需要前X-1个砝码能组合出K-W[X]或K+W[X]或K的重量。
最后直接访问DP数组即可。
CODE://************************************************************************//
//*Author : Handsome How *//
//************************************************************************//
//#pragma comment(linker, "/STA CK:1024000000,1024000000")
#pragma warning(disable:4996)
#include <vector>
#include <map>
#include <set>
#include <deque>
#include <queue>
#include <stack>
#include <algorithm>
#include <sstream>
#include <iostream>
#include <cstdio>
#include <cmath>
#include <cstdlib>
#include <cstring>
#include <ctime>
#include <cassert>
#if defined(_MSC_VER) || __cplusplus > 199711L
#define aut(r,v) auto r = (v)
#else
#define aut(r,v) __typeof(v) r = (v)
#endif
#define each(it,o) for(aut(it, (o).begin()); it != (o).end(); ++ it)
#define fur(i,a,b) for(int i=(a);i<=(b);i++)
#define furr(i,a,b) for(int i=(a);i>=(b);i--)
#define cl(a) memset((a),0,sizeof(a))
using namespace std;
typedef long long LL;
//----------------------------------------------------
bool dp[25][2500];
int a[30];
int main()
{
//freopen("E:\\data.in", "r", stdin);
ios :: sync_with_stdio(false);
int T;
scanf("%d", &T);
while (T--)
{
int n;
scanf("%d", &n);
fur(i, 1, n)scanf("%d", &a[i]);
cl(dp);
dp[0][0] = true;
fur(i, 1, n)fur(j, 0, 2000) {
if (j >= a[i])
if (dp[i - 1][j - a[i]])
dp[i][j] = 1;
if (j + a[i] <= 2000)
if (dp[i - 1][j + a[i]])
dp[i][j] = 1;
if (dp[i - 1][j])
dp[i][j] = 1;
}
int q;
scanf("%d", &q);
while (q--)
{
int t;
scanf("%d", &t);
if (t > 2000) {
printf("NO\n");
continue;
}
if (dp
[t]) {
printf("YES\n");
continue;
}
printf("NO\n");
}
}
return 0;
}
相关文章推荐
- web test LoadRunner xml / webservice / json / MQ / soapUI / baowen / WebService
- 距scoi仅一月的时候
- for的穷举和迭代
- [linux]删除目录下的一类文件
- A1101. Quick Sort (25)
- 图例阐述栈堆常量池之间的关系
- string类实现
- Codeforces 650D. Zip-line (动态LIS) (可持久化线段树 或 离线+树状数组)
- mac unity3d api获取不到问题
- 两张图片 合二为一
- HttpClient上传下载Demo
- cocos2d-x3.10java.lang.UnsatisfiedLinkError: Couldn't load cocos2djs from loader dalvik.system.Path
- asm基础——在c/c++语言中调用asm函数
- 进程间通信使用Messenger
- 解决Ajax发送DELETE请求时无法传参数的问题
- CentOS7安装配置redis
- dmesg
- 56. Merge Intervals 57. Insert Interval *HARD*
- PHP学习笔记(1)
- ucenter 简单分析与同步机制