BestCoder Round #70 1002 Jam's balance(DP)
2016-01-30 22:57
555 查看
题意:见题目
思路:这题比赛的时候做不出来...赛后看了下题解,没有想到是01背包的思想。如果全部砝码放在右边那么最重可以有2000个重量,由于左右都可以放,所以我们开dp[25][4005]的数组,将2000作为平衡点,转移方程见代码
题目
问题描述
输入描述
输出描述
输入样例
输出样例
Hint
思路:这题比赛的时候做不出来...赛后看了下题解,没有想到是01背包的思想。如果全部砝码放在右边那么最重可以有2000个重量,由于左右都可以放,所以我们开dp[25][4005]的数组,将2000作为平衡点,转移方程见代码
#include<cstdio> #include <queue> #include <cstring> #include <iostream> #include <cstdlib> #include <algorithm> #include <vector> #include <map> #include <string> #include <set> #include <ctime> #include <cmath> #include <cctype> using namespace std; #define maxn 100000 #define LL long long int cas=1,T; int dp[25][4005]; int main() { //freopen("in","r",stdin); scanf("%d",&T); while (T--) { int n; int s=0; int w[25]; scanf("%d",&n); for (int i = 1;i<=n;i++) { scanf("%d",&w[i]); s+=w[i]; } memset(dp,0,sizeof(dp)); dp[0][2000]=1; for (int i = 1;i<=n;i++) for (int j = 4000;j>=0;j--) { //设dp[i][j]表示用了i个砝码称j重量是否可行 if (dp[i-1][j]) //转移一,如果只用了i-1个砝码就称出了j,那么多加一个砝码也足够称出j dp[i][j]=1; if (j+w[i]<=4000 && dp[i-1][j]) //转移二,如果用i-1个砝码称出了j,那么我在右边多加一个砝码,就可以称出j+w[i] dp[i][j+w[i]]=1; if (j-w[i]>=2000 && dp[i-1][j]) //转移三,如果用i-1个砝码称出了j,那么我在左边多加一个砝码,就可以称出j-w[i] dp[i][j-w[i]]=1; } int q; scanf("%d",&q); while (q--) { int x; scanf("%d",&x); if (!dp [x+2000] || x>s) puts("NO"); else puts("YES"); } } //printf("time=%.3lf",(double)clock()/CLOCKS_PER_SEC); return 0; }
题目
问题描述
Jam有NN个砝码和一个没有游标的天平,现在给他(1 \leq N \leq 20)(1≤N≤20)个砝码,砝码可以放左边,也可以放右边,问可不可以测出所问的重量, 问的个数为(1 \leq M \leq 100)(1≤M≤100)个.
输入描述
第一行T(1 \leq T \leq 5)T(1≤T≤5),表示TT组数据。 接下来TT组数据: 接下来第一行一个数NN,表示砝码个数。 接下来第二行NN个数,表示砝码们的重量(1 \leq w_i \leq 100)(1≤wi≤100)。 接下来第三行一个数MM,表示询问个数。 接下来MM行每行一个数kk,表示一个询问。
输出描述
对于每组数据,输出"YES"或者"NO"
输入样例
1 2 1 4 3 2 4 5
输出样例
NO YES YES
Hint
单独放4,可以测出重量为4的 在同一边放4,1,可以测出重量为5的
相关文章推荐
- 安装ORACLE_RAC遇到的问题与解决方法
- Javascript异步编程的4种方法
- JS魔法堂:Data URI Scheme介绍
- lintcode: Unique Paths
- 2015让我受益最大的那些书--别找了,都在这里
- GlusterFS六大卷模式說明
- UVA1584(环状序列)
- JavaScript_全局函数
- go 有限状态机
- jQuery插件jQuery-validation的基本用法(一)
- IPython4_Notebook
- 【转】JNI 对象处理
- Linux Mysql5.7.10修改root初始密码
- Spark技术内幕:SortBasedShuffle实现解析
- python study note
- clone(深复制)
- Android 引导页详解
- Openstack Nova network
- 控制台贪吃蛇
- Binary Tree Inorder Traversa