案例,输入n(数组的大小),然后就是数组本身(只有1和-1)
比如
输入:
4
1 1 -1 -1
输出:
4
解释 {1} 、{1}、 {1,1}、{-1,-1}、{1,-1,-1}、{1,1,-1,-1}
#include<iostream>
#include<vector>
using namespace std;
int main() {
int n;
cin >> n;
int i = n;
vector<int> nums;
while(i--) {
int tmp;
cin>>tmp;
nums.push_back(tmp);
}
vector<vector<int>> dp(n+1,vector<int>(2,0));
//dp[i][0] 表示以nums[i-1]结尾的积为1的个数,dp[i][1] 表示以nums[i-1]结尾的积为-1的个数
for (int i = 1; i<=n; i++){
if (nums[i-1] == 1){
dp[i][0] = dp[i-1][0] + 1; // 如果nums[i-1]为1,积为1的个数再加1(就是加自己) 积为1乘以1 ,加自己
dp[i][1] = dp[i-1][1]; // 要dp积继续为-1,只能1乘以积为-1的dp。
} else {
dp[i][0] = dp[i-1][1]; // -1乘以积为-1的dp ,积才为1
dp[i][1] = dp[i-1][0] + 1; // -1 乘以积为1的dp,积才为-1, 再加上自己(-1)
}
}
int res = 0;
//最后将所有积为1的dp求和,即为总个数
for (int j = 1; j <= n; j++) {
res += dp[j][0];
}
cout << res;
return 0;
}