cff_0102
2024-11-20 11:00:56
考虑 dp。设
从后往前 dp,每次枚举这一分钟要骑的圈数,然后分要不要换一个领队的情况讨论并转移即可。
具体的,这一分钟骑
最后需要令
时间复杂度
#include<bits/stdc++.h>
#define chmin(x,y) x=min(x,y)
using namespace std;
const int N=101;
int dp[N][N][N];
int main(){
ios::sync_with_stdio(0);cin.tie(0);
int n,e,d;cin>>n>>e>>d;
if(e<d)return cout<<0,0;
memset(dp,0x3f,sizeof dp);
dp[n][e][e]=0;
for(int i=n;i>=1;i--){
for(int j=e;j>=0;j--)for(int k=e;k>=0;k--){
for(int ci=1;ci<=d;ci++){
if(j-ci*ci>=0&&k-ci>=0)chmin(dp[i][j-ci*ci][k-ci],dp[i][j][k]+1);
if(k-ci*ci>=0&&k-ci>=0)chmin(dp[i-1][k-ci*ci][k-ci],dp[i][j][k]+1);
}
}
}
int ans=0x3f3f3f3f;
for(int i=1;i<=n;i++){
for(int j=0;j<=e;j++){
ans=min(ans,dp[i][j][e-d]);
}
}
cout<<ans;
return 0;
}