P1466 [USACO2.2] 集合 Subset Sums

1|0P1466 USACO2.2 集合 Subset Sums

1|0毫无思路

如果不告诉我这题是DP题,我一定会爆搜。

看了题解,很妙。

居然也能套背包板子。

定义F[i][j]为在前i个数中选择一些数其和为j的方案总数。

显然转移方程F[i][j] = F[i - 1][j] + F[i - 1][j - i]

要么不选当前第i 个数,要么选。

最后答案输出F[sum/2]即可。

1|0代码实现

1|0显然能优化空间
#include <iostream> #include <cstdio> #include <cstring> using namespace std; int n, sum; int F[1010]; int main() { cin >> n; sum = ((n + 1) * n) / 2; if (sum % 2) { cout << 0; return 0; } F[1] = 1; F[0] = 1; for (int i = 2; i <= n; i++) { for (int j = sum; j >= 0; j--) { if (j > i) F[j] = F[j] + F[j - i]; } } cout << F[sum / 2]; return 0; }

__EOF__

本文作者Kdlyh
本文链接https://www.cnblogs.com/kdlyh/p/17809259.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   加固文明幻景  阅读(33)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 一文读懂知识蒸馏
· 终于写完轮子一部分:tcp代理 了,记录一下
点击右上角即可分享
微信分享提示