如果写过斐波拉切数列那么本题思路就会比较明确。[code]#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; int main() { long long mod = 1e9 + 7; int n = -1; cin >> n; vector nums(n,0); cin >> nums[0] >> nums[1]; long long preSum = nums[0] + nums[1]; for (int i = 2; i < n; ++i) { nums = (preSum + 1)%mod; preSum += nums; preSum %= mod; } long long res = 0; for (int i = 0; i < nums.size(); ++i) { res += nums; res %= mod; } cout > m; vector dp(n + 1, vector(m+10, INT_MAX/2));//dp[j]表示考虑前i个数字,组合为j的最小的数字个数 for (int i = 0; i < n + 1; ++i) { dp[0] = 0;//任何组合组成0 需要的个数是0个 } vector numsVt; for (int i = 0; i < n; ++i) { int t = -1; cin >> t; numsVt.push_back(t); } for (int i = 1; i m) { continue; } dp[thisNum] = 1; //特殊赋值 for (int j = 0; j = thisNum) { dp[j] = min({dp[j],dp[i - 1][j - thisNum] + 1 }); } } } if (dp[n][m] == INT_MAX / 2) { cout
欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) | Powered by Discuz! X3.4 |