滴滴笔试
第一题感觉用冒泡排序,里面加上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;
} 
查看10道真题和解析