2 条题解
-
0
感谢TPPDXM的题解,讲的非常透彻,这里简单列几个注意事项: 1.用于dp的数组容量要够 2.因为是每个元素最多取一次,所以内层循环从后往前遍历。
#include <bits/stdc++.h> using namespace std; int main() { int n,sum;scanf("%d %d",&n,&sum); vector<int> shuzu(n); vector<bool> panduan(sum+1,false); int total=0; for(int i=0;i<n;i++){ scanf("%d",&shuzu[i]); total+=shuzu[i]; } if(total<sum){ printf("NO"); return 0; } panduan[0]=true; for(int i:shuzu){ for(int j=sum;j>=i;j--){ if((j-i)>=0&&panduan[j-i]){ panduan[j]=true; } } } if(panduan[sum]){ printf("YES"); } else{ printf("NO"); } return 0; }
信息
- ID
- 205
- 时间
- 10ms
- 内存
- 256MiB
- 难度
- 8
- 标签
- 递交数
- 18
- 已通过
- 7
- 上传者