Run ID 作者 问题 语言 测评结果 分数 时间 内存 代码长度 提交时间
35055 liuziming 【S】T1 C++ 运行超时 95 2369 MS 209380 KB 1284 2024-11-26 15:02:57

Tests(20/21):


#include<bits/stdc++.h> using namespace std; int n,a[20010],c[200010],ptot,p[2010]; short dp[1<<(26)],qwp;int nowsum=0; vector<int> sta[30]; inline int popcount(int x){ register int cnt=0; while(x){ cnt=cnt+(x&1); x>>=1; }return cnt; }int main(){ cin>>n; for(int i=1;i<=n;i++){ cin>>a[i]; c[i]=a[i]-a[i-1]; }c[n+1]=-a[n]; for(int i=1;i<=n;i++){ if(c[i]!=0){ p[++ptot]=c[i]; } }for(int i=1;i<(1<<ptot);i++){ sta[popcount(i)].push_back(i); }for(int len=1;len<=ptot;len++){ for(int nowsta:sta[len]){ nowsum=0; for(register int i=1;i<=ptot;i++){ if(((1<<(i-1))&nowsta)!=0){ nowsum+=p[i]; } }for(register int j=1;j<=ptot;j++){ if(((1<<(j-1))&nowsta)==0){ if(nowsum+p[j]==0){ qwp=dp[nowsta]+1; dp[(1<<(j-1))|nowsta]=max(qwp,dp[(1<<(j-1))|nowsta]); }else{ dp[(1<<(j-1))|nowsta]=max(dp[nowsta],dp[(1<<(j-1))|nowsta]); } } } } }cout<<ptot-dp[(1<<ptot)-1]<<'\n'; }


测评信息: