hdu 5616 Jam's balance(dp 正反01背包)

 2023-09-05 阅读 50 评论 0

摘要:来自官方题解: AC代码: 1 #pragma comment(linker, "/STACK:1024000000,1024000000") 2 #include<iostream> 3 #include<cstdio> 4 #include<cstring> 5 #include<cmath> 6 #include<math.h> 7 #include<algorithm> 8

   

 

来自官方题解:

AC代码:

 1 #pragma comment(linker, "/STACK:1024000000,1024000000")
 2 #include<iostream>
 3 #include<cstdio>
 4 #include<cstring>
 5 #include<cmath>
 6 #include<math.h>
 7 #include<algorithm>
 8 #include<queue>
 9 #include<set>
10 #include<bitset>
11 #include<map>
12 #include<vector>
13 #include<stdlib.h>
14 using namespace std;
15 #define ll long long
16 #define eps 1e-10
17 #define MOD 1000000007
18 #define N 26
19 #define M 2006
20 #define inf 1e12
21 int n,a[N];
22 int dp[M];
23 int main()
24 {
25     int t;
26     scanf("%d",&t);
27     while(t--){
28         memset(dp,0,sizeof(dp));
29         scanf("%d",&n);
30         int sum=0;
31         for(int i=0;i<n;i++){
32             scanf("%d",&a[i]);
33             sum+=a[i];
34         }
35         dp[0]=1;
36         for(int i=0;i<n;i++){
37             for(int j=sum;j>=a[i];j--){
38                 dp[j]|=dp[j-a[i]];
39             }
40         }
41         
42         for(int i=0;i<n;i++){
43             for(int j=0;j+a[i]<=sum;j++){
44                 dp[j]|=dp[j+a[i]];
45             }
46         }
47         
48         int m;
49         scanf("%d",&m);
50         while(m--){
51             int weight;
52             scanf("%d",&weight);
53             if(dp[weight]){
54                 printf("YES\n");
55             }else{
56                 printf("NO\n");
57             }
58         }
59         
60     }
61     return 0;
62 }
View Code

 

版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。

原文链接:https://hbdhgg.com/4/1247.html

发表评论:

本站为非赢利网站,部分文章来源或改编自互联网及其他公众平台,主要目的在于分享信息,版权归原作者所有,内容仅供读者参考,如有侵权请联系我们删除!

Copyright © 2022 匯編語言學習筆記 Inc. 保留所有权利。

底部版权信息