2017浙江工业大学-校赛决赛 小M和天平
2017-08-14 18:01
260 查看
Description
小M想知道某件物品的重量,但是摆在他面前的只有一个天平(没有游标)和一堆石子,石子可以放左边也可以放右边。他现在知道每个石子的重量。问能不能根据上述条件,能不能测出所问的重量。Input
第一行T(1≤T≤100),表示T组数据。接下来T组数据:
接下来第一行一个数N,表示石子个数。(1≤N≤100)
接下来第二行N个数,表示石子的重量。(1≤w_i≤100)
接下来第三行一个数M,表示询问个数。(1≤M≤100)
接下来M行每行一个数k,表示一个询问。
Output
对于每组数据,输出"YES"或者"NO"Sample Input
1 2 1 4 3 2 4 5
Sample Output
NO YES YES 解法: dp[i][j] 表示计算到第i个砝码,能计算j重量 首先dp[i][0]=1 5 2 1 第一个数字为5时,我们可以计算5的质量 dp[1][5]=dp[1-1][0+5]=1 2 第二个数字为2时,我们知道dp[2][7]=dp[2-1][7-2]=1或者是dp[2][3]=dp[2-1][5-2]=1 (当dp[1][5]==1时) 那么有 dp[i-1][j]==1时 dp[i][j]=1 dp[i][j+a[i]]=1 dp[i][abs(j-a[i])]=1
#include<cstdio> #include<algorithm> #include<cstring> #include<map> #include<vector> #include<iostream> #include<sstream> #include<cmath> #include<string> #include<set> #include<list> #include<stack> #include<queue> using namespace std; int dp[200][100*100+10]; int main() { int t; scanf("%d",&t); while(t--){ int sum=0; int a[200]; int n; scanf("%d",&n); memset(dp,0,sizeof(dp)); for(int i=1;i<=n;i++){ scanf("%d",&a[i]); sum+=a[i]; } for(int i=0;i<=n;i++){ dp[i][0]=1; } for(int i=1;i<=n;i++){ for(int j=sum;j>=0;j--){ if(dp[i-1][j]){ dp[i][j]=1; dp[i][abs(j-a[i])]=1; dp[i][j+a[i]]=1; } } } int m; scanf("%d",&m); while(m--){ long long p; scanf("%lld",&p); if(dp [p]){ puts("YES"); }else{ puts("NO"); } } } return 0; }
相关文章推荐
- 2017浙江工业大学-校赛决赛 小马哥和数列
- 2017浙江工业大学-校赛决赛 XiaoWei的战斗力
- 2017浙江工业大学-校赛决赛 猜猜谁是我
- 2017浙江工业大学-校赛决赛 竹之书
- 2017浙江工业大学-校赛决赛 BugZhu抽抽抽!!
- 2017浙江工业大学-校赛决赛 画图游戏
- 浙江工业大学校赛 小M和天平
- 浙江工业大学校赛 小M和天平
- 2017 浙大校赛 Course Selection System(01背包)
- HAUT 1262 魔法宝石(spfa)(河南工业大学2017校赛)
- HAUT 1261 地狱飞龙(数值积分)(河南工业大学2017校赛)
- HAUT 1266 最大子段和(类似DP)(河南工业大学2017校赛)
- 2017河南工业大学校赛 I 小天使改名
- 2017河南工业大学校赛 F Hmz 的女装
- 2017CUIT & FJUT & SWPU三校联合新生赛-决赛 D,E
- 2017多校赛6 Inversion hdu 6098
- 2017年浙江工业大学大学生程序设计迎新赛决赛—网络同步赛
- 2017 山东理工第九届校赛 H C~K玩游戏(博弈)
- 2017 杭电多校赛第八场 1011题 Killer Names HDu 6143
- 2017广东工业大学程序设计竞赛决赛:G. 等凹数字(数位DP)