滴滴笔试
第一题感觉用冒泡排序,里面加上if判断,可惜没时间做了
第二题本质上是最长公共子序列问题,不过加入了总cost的约束,亲测用最长公共子序列做是0.4几,加了约束,感觉还是有漏洞,最后定格在0.64
贴上第二题代码
#include<iostream> #include<cstring> using namespace std; int main(){ int n; cin>>n; int total,cost; cin>>total>>cost; int A[n 5]; int B[n 5]; for(int i=1;i<=n;i ) cin>>A[i]; for(int i=1;i<=n;i ) cin>>B[i]; int memo[n 5][n 5]; int vis_A[n 5]; int vis_B[n 5]; memset(vis_A,0,sizeof(A)); memset(vis_B,0,sizeof(B)); for(int i=0;i<=n;i ) { for(int j=0;j<=n;j ) { if(i==0||j==0) memo[i][j]=0; else if(A[i]==B[j]) { memo[i][j]=memo[i-1][j-1] 1; vis_A[i]=1; vis_B[i]=1; } else memo[i][j]=max(memo[i-1][j],memo[i][j-1]); } } int ans = memo[n][n]; int cnt1,cnt2; for(int i=n;i>0;i--){ if(vis_A[i]==1){ cnt1=i; break; } } for(int i=n;i>0;i--){ if(vis_B[i]==1){ cnt2=i; break; } } int t1=cost*ans (2*n-cnt1-cnt2); if(t1<=total) cout<<ans; else{ while(t1>total){ ans--; t1=t1-cost 2; } cout<<ans; } return 0; }