zoukankan      html  css  js  c++  java
  • 数字和为sum的方法数

    给定一个有n个正整数的数组A和一个整数sum,求选择数组A中部分数字和为sum的方案数。当两种选取方案有一个数字的下标不一样,我们就认为是不同的组成方案。

    分析:暴搜,2^1000,显然是不行的,1000,1000,数个数,这不是0/1背包么,dp动态规划,然后就ok了。注意结果要用long long来存储。

     1 #include<bits/stdc++.h>
     2 #define pb push_back
     3 #define FOR(i, n) for (int i = 0; i < (int)n; ++i)
     4 #define dbg(x) cout << #x << " at line " << __LINE__ << " is: " << x << endl
     5 typedef long long ll;
     6 using namespace std;
     7 typedef pair<int, int> pii;
     8 const int maxn = 1e3 + 10;
     9 int n, m;
    10 long long dp[maxn];
    11 int a[maxn];
    12 void solve() {
    13     cin >> n >> m;
    14     for (int i = 1; i <= n; i++) cin >> a[i];
    15     dp[0]= 1;
    16     for (int i = 1; i <= n; i++) {
    17         for (int j = m; j >= a[i]; j--) {
    18             dp[j] += dp[j - a[i]];
    19         }
    20     }
    21     cout << dp[m] << endl;
    22 }
    23 int main() {
    24     //freopen("test.in", "r", stdin);
    25     //freopen("test.out", "w", stdout);
    26     solve();
    27     return 0;
    28 }
  • 相关阅读:
    机器学习之线性回归
    最长回文字串——manacher算法
    linux系统下pdf操作软件pdftk
    markdown表格
    3.9 标准化,让运营数据落入相同的范围
    3.numpy_array数组
    4. 归并排序和快速排序
    3.病毒分裂
    2. 大整数乘法
    1.单峰序列
  • 原文地址:https://www.cnblogs.com/y119777/p/5900681.html
Copyright © 2011-2022 走看看