思路
dp[i][j]代表arr1前i个数以值j结尾的单调数组对数目,然后枚举第i-1个数的值0-j(dp[i-1][k]),判断是否合法,如果合法就dp[i][j]+=dp[i-1][k]
代码实现
class Solution {
public:
int countOfPairs(vector<int>& nums) {
int mod=1e9+7;
int n=nums.size();
//记得开long long
vector<vector<long long>>dp(n,vector<long long>(51,0));
//初始化
for(int i=0;i<=nums[0];i++){
dp[0][i]=1;
}
for(int i=1;i<n;i++){
for(int j=0;j<=nums[i];j++){
for(int k=0;k<=j;k++){
//判断是否合法
if(j>=k&&nums[i]-j<=nums[i-1]-k){
dp[i][j]+=dp[i-1][k]%mod;
}
}
}
}
//累加即是答案
long long ans=0;
for(int i=0;i<=nums[n-1];i++){
ans+=dp[n-1][i];
}
return ans%mod;
}
};