UVA12455 Bars 题解
此题洛谷题面没有翻译(以后可能会有,以博主发布时间为准),我就简述一下大意吧:
有 组数据,对于每组数据,给定 个数,问 个数中选出一些数,使得和为 。
入门题嘛,显然是一个 dp 题,有点像 背包的模板题。
设 为 个数中的第 个, 从 依次递减枚举到 , 为前 个数是否能凑出 (为了方便,我就直接使用滚动数组了,如果不懂的话,请 bdfs),由此得出,当 为 (前 个数能凑出 )时,(前 个数能凑出 )。
最后, 即为答案,上代码!
#include<bits/stdc++.h>
using namespace std;
int T, n, p, l[25], f[1005];
int main() {
scanf("%d", &T);
for(int t = 1; t <= T; t++) {
memset(f, 0, sizeof(f));
scanf("%d%d", &n, &p);
for(int i = 1; i <= p; i++) scanf("%d", &l[i]);
f[0] = 1;
for(int i = 1; i <= p; i++)
for(int j = n; j >= l[i]; j--)
if(f[j - l[i]]) f[j] = 1;
if(f[n]) printf("YES\n");
else printf("NO\n");
}
return 0;
}
本文作者:SunSkydp
本文链接:https://www.cnblogs.com/sunskydp/p/solution-uva12455.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步