내 연락처 정보
우편메소피아@프로톤메일.com
2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
돌 더미가 있습니다. 정수 배열을 사용하세요.stones
표현하다.~에stones[i]
첫 번째를 나타냅니다.i
돌의 무게.
각 라운드에서 선택하세요.어느 두 개의 돌 , 함께 분쇄합니다.돌의 무게는 다음과 같다고 가정하자.x
그리고y
,그리고x <= y
. 그러면 분쇄의 가능한 결과는 다음과 같습니다.
x == y
, 그러면 두 돌 모두 완전히 부서질 것입니다.x != y
, 그러면 무게는x
돌이 완전히 부서져 무게가 나가게 됩니다.y
돌의 새로운 무게는y-x
。마침내,기껏해야 한 조각밖에 남지 않을 거예요 결석.이 돌로 돌아가세요가능한 가장 작은 무게 .남은 돌이 없으면 다시 돌아오세요0
。
예시 1:
输入:stones = [2,7,4,1,8,1] 输出:1 解释: 组合 2 和 4,得到 2,所以数组转化为 [2,7,1,8,1], 组合 7 和 8,得到 1,所以数组转化为 [2,1,1,1], 组合 2 和 1,得到 1,所以数组转化为 [1,1,1], 组合 1 和 1,得到 0,所以数组转化为 [1],这就是最优值。
짝수와는 아무런 관련이 없으며 너무 똑똑하지도 않다는 점에 유의해야 합니다.
- class Solution {
- public:
- int lastStoneWeightII(vector<int>& stones)
- {
- vector<int> dp(3001,0);
- int sum = 0;
- for(int i = 0; i < stones.size() ; i ++)
- {
- sum += stones[i];
- }
- // if(sum % 2 == 0) return 0; 注意与偶数无关
- int target = sum/2;
- dp[0] = 0;
- for(int i = 0; i < stones.size() ; i++)
- {
- for(int j = target; j >= stones[i] ; j--)
- {
- dp[j] = max(dp[j],dp[j - stones[i]]+ stones[i]);
- }
- }
- return sum - dp[target] - dp[target];
- }
- };
음수가 아닌 정수의 배열이 제공됩니다.nums
그리고 정수target
。
배열의 각 정수 앞에 추가됩니다.'+'
또는'-'
, 그런 다음 모든 정수를 연결하여표현 :
nums = [2, 1]
,허용2
이전에 추가됨'+'
,존재하다1
이전에 추가됨'-'
, 그런 다음 연결되어 표현식을 얻습니다."+2-1"
。위의 방법을 사용하여 생성할 수 있고 그 결과가 다음과 같은 함수를 반환합니다.target
차이점표현수.
예시 1:
输入:nums = [1,1,1,1,1], target = 3 输出:5 解释:一共有 5 种方法让最终目标和为 3 。 -1 + 1 + 1 + 1 + 1 = 3 +1 - 1 + 1 + 1 + 1 = 3 +1 + 1 - 1 + 1 + 1 = 3 +1 + 1 + 1 - 1 + 1 = 3 +1 + 1 + 1 + 1 - 1 = 3
- class Solution {
- public:
- int findTargetSumWays(vector<int>& nums, int target)
- {
- vector<int> dp(1500,0);
- int sum = 0;
- for(int i = 0; i < nums.size() ; i++)
- {
- sum += nums[i];
- }
- if(abs(target) > sum) return 0;
- if((sum + target)%2 == 1) return 0;
-
- int mid = (sum + target)/2;
- dp[0] = 1;
- for(int i = 0; i < nums.size( ) ; i++)
- {
- for(int j = mid ; j >= nums[i] ; j--)
- {
- dp[j] += dp[j - nums[i]];
- }
- }
- return dp[mid];
- }
- };
이진 문자열 배열을 제공합니다.strs
그리고 두 개의 정수m
그리고n
。
찾아서 돌려주세요strs
가장 큰 부분 집합의 길이최대가지다m
개인0
그리고n
개인1
。
만약에x
모든 요소도 마찬가지다.y
요소, 컬렉션x
컬렉션입니다y
~의하위 집합 。
예시 1:
输入:strs = ["10", "0001", "111001", "1", "0"], m = 5, n = 3 输出:4 解释:最多有 5 个 0 和 3 个 1 的最大子集是 {"10","0001","1","0"} ,因此答案是 4 。 其他满足题意但较小的子集包括 {"0001","1"} 和 {"10","1","0"} 。{"111001"} 不满足题意,因为它含 4 个 1 ,大于 n 的值 3 。
- class Solution {
- public:
- int findMaxForm(vector<string>& strs, int m, int n)
- {
- vector<vector<int>> dp(m+1,vector<int>(n+1,0));
- for(string str : strs)
- {
- int zero = 0;
- int one = 0;
- for(char c : str)
- {
- if(c == '0') zero++;
- else one++;
-
- }
- for(int i = m; i >= zero ; i--)
- {
- for(int j = n; j >= one; j--)
- {
- dp[i][j] = max(dp[i][j],dp[i - zero][j - one] + 1);
- }
- }
- }
- return dp[m][n];
- }
- };