题解:P7634 [COCI 2010/2011 #5] HONI
dulinfan2023 · · 题解
看错题卡了好久。。。
思路
显然有 dp。
设计一个
显然在
先看更简单的
再看
- 使用固定
i 难度的题,情况数是a_i\times(dp_{i-1,0}+dp_{i-1,1}) 。 - 使用
i-1\:\texttt{or}\:i 的题,假设i-1 用的是i-1\:\texttt{or}\:i 的题有(b_{i-1}-1)\times dp_{i-1,1} ,否则就是b_{i-1}\times dp_{i-1,0} 。
代码
#include<bits/stdc++.h>
using namespace std;
typedef int i32;
#define int long long
#define debug() cout<<"come on"<<'\n'
#define mkp make_pair
#define pb push_back
#define ft first
#define sd second
typedef pair<int,int> pii;
typedef pair<int,pii> piii;
const int mod=1e9+7;
int n,a[100005],b[100005],c[100005],dp[100005][2];
signed main(){
cin>>n;
for(int i=1;i<=n;i++)cin>>a[i];
for(int i=1;i<n;i++)cin>>b[i];
dp[1][0]=a[1],dp[1][1]=b[1];
for(int i=2;i<=n;i++){
dp[i][0]=a[i]*(dp[i-1][1]+dp[i-1][0])+b[i-1]*dp[i-1][0]+(b[i-1]-1)*dp[i-1][1];
dp[i][1]=b[i]*(dp[i-1][0]+dp[i-1][1]);
dp[i][0]%=mod,dp[i][1]%=mod;
}
cout<<(dp[n][0]+dp[n][1])%mod;
}