CF 417A
文字理解题,如题意,要么用c个选n个,要么用x*d个选x个
那么分别考虑即可
void solve(){
int c,d,n,m,k;
cin>>c>>d>>n>>m>>k;
int sum=n*m-k;
if(sum<=0){
cout<<0<<'\n';
return;
}
int cnt=sum/n;
int rem=sum%n;
int ans=cnt*min(c,n*d)+min(rem*d,c);
cout<<ans<<"\n";
return;
}
CF 459E
也是简单题
考虑每条边只会对比该边小的边产生影响,所以我们对边按照权值排序
之后就和最长上升子序列一样了
struct edge{
int from,to,w;
};
void solve(){
int n,m;cin>>n>>m;
vector<pair<int,int>>state;
vector<int>dp(n+1);
vector<edge>E(m+1);
int ans=0;
auto calc=[&](){
for(auto pi:state){
dp[pi.first]=max(dp[pi.first],pi.second);
ans=max(dp[pi.first],ans);
}
state.clear();
};
for(int i=1;i<=m;++i){
cin>>E[i].from>>E[i].to>>E[i].w;
}
sort(E.begin()+1,E.end(),[&](edge a,edge b){
return a.w<b.w;
});
for(int i=1;i<=m;++i){
if(E[i].w!=E[i-1].w)calc();
state.push_back({E[i].to,dp[E[i].from]+1});
}
calc();
cout<<ans<<'\n';
return;
}
晚上字节二面和明天早上蚂蚁二面加油啦,确实蛮想去做oceanbase的,啊啊啊啊
干巴喽