又是一个div3的简单dp
题意
给个链接自行体会
http://codeforces.com/problemset/problem/1324/E
代码
#include<bits/stdc++.h> using namespace std; int dp[2005][2005]; int a[2005]; int main(){ int n,h,l,r; cin>>n>>h>>l>>r; for(int i=1;i<=n;i++){ cin>>a[i]; } memset(dp,-1,sizeof(dp)); dp[0][0]=0; for(int i=1;i<=n;i++){ for(int j=0;j<h;j++){ int k=j-a[i]; if(k<0)k+=h; if(k!=h-1){ dp[i][j]=max(dp[i-1][k],dp[i-1][k+1]); if(j>=l&&j<=r&&dp[i][j]!=-1)dp[i][j]++; } else { dp[i][j]=max(dp[i-1][h-1],dp[i-1][0]); if(j>=l&&j<=r&&dp[i][j]!=-1)dp[i][j]++; } } } int ans=0; for(int i=0;i<h;i++){ ans=max(ans,dp[n][i]); } cout<<ans; }