NC51164. 数字组合
描述
输入描述
第一行是两个数字,表示N和M。
第二行起是N个数。
输出描述
就一个数字,表示和为M的组合的个数。
示例1
输入:
4 4 1 1 2 2
输出:
3
C 解法, 执行用时: 2ms, 内存消耗: 364K, 提交时间: 2023-05-05 21:23:56
#include<stdio.h> int v,f[1010]; int main(){ int n,m; scanf("%d%d",&n,&m); f[0]=1; for(int i=1;i<=n;i++){ scanf("%d",&v); for(int j=m;j>=v;j--){ f[j]+=f[j-v]; } } printf("%d",f[m]); }
C++14(g++5.4) 解法, 执行用时: 3ms, 内存消耗: 504K, 提交时间: 2020-03-22 17:31:26
#include<bits/stdc++.h> using namespace std; int n,m; int a[102],f[10002]={1}; int main() { cin>>n>>m; for(int i=1;i<=n;i++) cin>>a[i]; for(int i=1;i<=n;i++) for(int j=m;j>=a[i];j--) f[j]+=f[j-a[i]]; cout<<f[m]; return 0; }
C++ 解法, 执行用时: 3ms, 内存消耗: 584K, 提交时间: 2022-02-14 16:59:48
#include <iostream> using namespace std; int n,a,m,f[10005]; int main() { cin>>n>>m; f[0]=1; for (int i=1;i<=n;i++) { cin>>a; for (int j=m;j>=0;j--) f[j+a]+=f[j]; } cout<<f[m]; }