目标数和

在一个数组中取若干个数 看是否能组成对应的数

#include<bits/stdc++.h>
using namespace std;
#define MAXN 220
void display(int num)
{
    cout << num << " ";
}
int main()
{
    vector<int> v;
    freopen("in.txt","r",stdin);
    int n,result;
    cin >> n >> result;
    for(int i = 0 ;i < n;i++)
    {
        int temp;
        cin >> temp;
        v.push_back(temp);
    }
    //数据输入完成
    //数据处理部分
    //1. 定义动态规划数组
    int a[n+1][result+1];
    memset(a,0,sizeof(a));
    /*
        2. 数组数据的初始化
        0列表示0得到目标值为0 全部即全部初始化为为1
        0只给你0个数字仅0 为1
    */ 
   for(int i =0;i <= n;i++)
   a[i][0] = 1;
   //打印矩阵
    for(int i = 0;i <=n;i++)
    {
        for_each(a[i],a[i]+result+1,display);
        cout << endl;
    }
    cout << "初始化:" << endl;
   //3. 数据操作
   //1行到n行
   for(int i = 1;i <= n;i++)
   {
       for(int j = 1;j <= result;j++)
       {
           if(j<v[i-1])
           a[i][j] = a[i-1][j];
            else{
                a[i][j] = a[i-1][j]||a[i-1][j-v[i-1]];
            }
       }
   }

    for(int i = 0;i <=n;i++)
    {
        for_each(a[i],a[i]+result+1,display);
        cout << endl;
    }
}

猜你喜欢

转载自blog.csdn.net/weixin_38331049/article/details/89233522