dd爱科学1.0
最长不下降子序列。。。
dd爱科学2.0
每次改成啥不知道,要求结果最大化
一看1e6,暴力dp上
int a[N],n,dp[N][30]; char s[N]; void solve(){ cin>>n;cin>>s+1; for(int i=1;i<=n;++i){ a[i]=s[i]-'A'+1; } for(int i=0;i<=n;++i){ for(int j=0;j<=26;++j){ dp[i][j]=inf; } } for(int i=1;i<=26;++i){ dp[1][i]=abs(a[1]-i); } for(int i=2;i<=n;++i){ for(int j=1;j<=26;++j){ for(int k=1;k<=j;++k){ dp[i][j]=min(dp[i][j],dp[i-1][k]+abs(j-a[i])); } } } int ans=inf; for(int i=1;i<=26;++i){ ans=min(dp[n][i],ans); } cout<<ans<<endl; }
dd爱框框
找一段最短的区间,区间和大于等于x,随便尺取一下
int p1,p2,sum=0,n,x,a[N],l,r; void solve(){ cin>>n>>x;int ans=n; for(int i=1;i<=n;++i)cin>>a[i]; p1=1;p2=0; while(p2<=n){ p2++;sum+=a[p2]; while(p2<=n&&sum<x){ p2++; sum+=a[p2]; } while(p1<=n&&sum-a[p1]>=x){ sum-=a[p1]; p1++; } if(ans>p2-p1+1){ ans=p2-p1+1; l=p1;r=p2; } } cout<<l<<" "<<r<<endl; }