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 }
  • 相关阅读:
    bzoj1415 NOI2005聪聪和可可
    Tyvj1952 Easy
    poj2096 Collecting Bugs
    COGS 1489玩纸牌
    COGS1487 麻球繁衍
    cf 261B.Maxim and Restaurant
    cf 223B.Two Strings
    cf 609E.Minimum spanning tree for each edge
    cf 187B.AlgoRace
    cf 760B.Frodo and pillows
  • 原文地址:https://www.cnblogs.com/y119777/p/5900681.html
Copyright © 2011-2022 走看看