判断一个数能否通过一个数组中的数相乘而得到(数组中的数使用次数不限)
Posted liugl7
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了判断一个数能否通过一个数组中的数相乘而得到(数组中的数使用次数不限)相关的知识,希望对你有一定的参考价值。
题目:判断一个数能否通过一个数组中的数相乘而得到(数组中的数使用次数不限)
例如:第一行输入目标数x,第二行再输入一个数组(每个数用空格隔开),如果能则输出1,不能则输出-1;
输入例1:
20
2 3 5 7
输出:
1
解释:20 = 2*2*5,可以组成,所以输出1.
输入例2:
20
3 5 7
输出:
-1
解释:无法组成,所以输出-1.
解题思路:转化成完全背包问题来解决(因为每个因子都可以使用无限次)
#include <iostream> #include <bits/stdc++.h> using namespace std; int main() int x; string str_x; while(getline(cin, str_x) ) x = atoi(str_x.c_str()); string str; getline(cin, str); istringstream temp(str); vector<int> arr; int cur; while(temp>>cur) arr.push_back(cur); vector<int> dp(x+1, 0); // vector<int> dp(x+1, -1000); dp[1] = 1; for(int i=0; i<arr.size(); i++) for(int j=arr[i]; j<=x; j++ ) if(j%arr[i]==0) dp[j] = max(dp[j], dp[j/arr[i] ]); if(dp[x]>0) cout<<1<<endl; else cout<<-1<<endl; return 0;
以上是关于判断一个数能否通过一个数组中的数相乘而得到(数组中的数使用次数不限)的主要内容,如果未能解决你的问题,请参考以下文章
递归之求二维数组的最短路径给定一个整数和一个数组任意选择数组中的数累加能否得到该整数