当前位置:网站首页>Bailian4004 数字组合【递归+DP】
Bailian4004 数字组合【递归+DP】
2022-04-21 21:14:00 【海岛Blog】
总时间限制: 1000ms 内存限制: 65536kB
描述
有n个正整数,找出其中和为t(t也是正整数)的可能的组合方式。如:
n=5,5个数分别为1,2,3,4,5,t=5;
那么可能的组合有5=1+4和5=2+3和5=5三种组合方式。
输入
输入的第一行是两个正整数n和t,用空格隔开,其中1<=n<=20,表示正整数的个数,t为要求的和(1<=t<=1000)
接下来的一行是n个正整数,用空格隔开。
输出
和为t的不同的组合方式的数目。
样例输入
5 5
1 2 3 4 5
样例输出
3
问题链接:Bailian4004 数字组合
问题简述:(略)
问题分析:用递归函数解决组合问题,用动态规划来解决则计算时间更短,不解释。递归实现虽然有点慢,可以用记忆化递归来改进。该题与参考链接是同类型题,只是输入数据不同。
程序说明:(略)
参考链接:Bailian2755 神奇的口袋【递归+DP】
题记:(略)
AC的C语言程序(递归)如下:
/* Bailian4004 数字组合 */
#include <stdio.h>
#include <string.h>
#define N 20
#define T 1000
int a[N];
int cnt(int n, int w)
{
if(w == 0) return 1;
else if(n == 0) return 0;
else return cnt(n - 1, w) + cnt(n - 1, w - a[n - 1]);
}
int main()
{
int n, t;
scanf("%d%d", &n, &t);
for(int i = 0; i < n; i++)
scanf("%d", &a[i]);
printf("%d\n", cnt(n, t));
return 0;
}
AC的C语言程序(DP)如下:
/* Bailian4004 数字组合 */
#include <stdio.h>
#include <string.h>
#define N 20
#define T 1000
int a[N + 1], dp[T + 1];
int main()
{
int n, t;
scanf("%d%d", &n, &t);
for(int i = 1; i <= n; i++)
scanf("%d", &a[i]);
memset(dp, 0, sizeof dp);
dp[0] = 1;
for (int i = 1; i <= n; i++)
for (int j = t; j >= 1; j--)
if (a[i] <= j)
dp[j] += dp[j - a[i]];
printf("%d\n", dp[t]);
return 0;
}
版权声明
本文为[海岛Blog]所创,转载请带上原文链接,感谢
https://tigerisland.blog.csdn.net/article/details/124311959
边栏推荐
猜你喜欢
随机推荐
vxworks学习
常用网络工具4:SG 宽带工具
红日靶场--内网渗透练习
预处理问题
EeasyBI报表系统 数据源可视化视图使用手册
32-bit and 64 bit computers
7-3 simple simulation of banking business queue | PTA
shell根据分隔符截取字符串awk
工作流操作说明
滑环接线最主要的看什么
【嵌入式】关于IAP+Xmodem从外部接收bin文件对芯片进行升级学习记录
多租户积分系统功能清单
工作流 流程设置 定制开发
年薪170W阿里P8相亲要求女方月薪1万,网友:有点高
广联达定位为数字“使能者”
各种dns:百度DNS/阿里DNS/114DNS/腾讯DNS/谷歌DNS/OpenDNS 对比评测
Platefarm proposed the perpetual motion machine model and will open the IEO in Huobi on April 22
【常用快捷键】
Tips for using win10 close user tips before software installation
Operation instructions for upgrading Tongda OA workflow









