Mi informacion de contacto
Correo[email protected]
2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
- class Solution {
- public:
- int lastStoneWeightII(vector<int>& stones) {
-
- int sum = 0;
- for(int stone : stones) sum += stone;
- int bagSize = sum /2;
-
- vector<int> dp(bagSize + 1, 0);
-
- for(int i = 0; i < stones.size(); i++){ //遍历物品
- for(int j = bagSize; j >= stones[i]; j--){ //遍历背包
- dp[j] = max(dp[j], dp[j - stones[i]] + stones[i]);
- }
- }
- return sum - 2*dp[bagSize];
- }
- };
- class Solution {
- public:
- int findTargetSumWays(vector<int>& nums, int target) {
-
- int ans = 0, sum = 0;
- for(int num : nums) sum += num;
-
- if((sum - target) % 2 != 0 || abs(sum) < abs(target)) return 0;
- int bagSize = (sum - target)/2;
- // dp[j] 表示:填满j(包括j)这么大容积的包,有dp[j]种方法
- vector<int> dp(bagSize + 1, 0);
- dp[0] = 1;
- for(int i = 0; i < nums.size(); i++){
- for(int j = bagSize; j >= nums[i]; j--){
- dp[j] += dp[j - nums[i]]; //注意理解递推公式!!!!!!
- }
- }
- return dp[bagSize];
- }
- };
Los elementos de la matriz de cadenas en esta pregunta son elementos, ¡y cada elemento es uno!Y m y n equivalen a una mochila, una mochila bidimensional.。 ¡Preste atención para comprender el significado de la longitud máxima del subconjunto en la pregunta! ! ! ! ! !
- class Solution {
- public:
- int findMaxForm(vector<string>& strs, int m, int n) {
- // dp[i][j]:最多有i个0和j个1的strs的最大子集的大小为dp[i][j]。
- vector<vector<int>> dp(m + 1, vector<int>(n + 1, 0)); //默认初始化0
-
- for(string str : strs){ //遍历物品
- int zeroNum = 0, oneNum= 0;
- for(char c : str){
- if(c == '0') zeroNum++;
- else oneNum++;
- }
-
- for(int i = m; i >= zeroNum; i--){ //遍历背包容量且从后向前遍历!
- for(int j = n; j >= oneNum; j--){
- dp[i][j] = max(dp[i][j], dp[i - zeroNum][j - oneNum] + 1);
- }
- }
- }
- return dp[m][n];
- }
- };