寒假每日一题(提高组)Week 3 完结
Posted 辉小歌
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了寒假每日一题(提高组)Week 3 完结相关的知识,希望对你有一定的参考价值。
目录
1262. 鱼塘钓鱼【多路归并 枚举】
#include<bits/stdc++.h>
using namespace std;
const int N=1e5+10;
int a[N],b[N],t[N],n,T;
int solve(int k,int t)
int sum=0;
int cnt[N]=0;
for(int i=1;i<=k;i++) cnt[i]=a[i];
for(int i=1;i<=t;i++)
int temp=-1e9,index=0;
for(int j=1;j<=k;j++)
if(cnt[j]>temp) temp=cnt[j],index=j;
if(temp<0) return sum;
sum+=cnt[index],cnt[index]-=b[index];
return sum;
int main(void)
cin>>n;
for(int i=1;i<=n;i++) cin>>a[i];
for(int i=1;i<=n;i++) cin>>b[i];
for(int i=2;i<=n;i++) cin>>t[i],t[i]+=t[i-1];
cin>>T;
int l=0,ans=0;
for(int i=1;i<=n;i++) if(T>=t[i]) l=i;//最远可以到那里
for(int i=1;i<=l;i++) ans=max(ans,solve(i,T-t[i]));
cout<<ans;
return 0;
312. 乌龟棋【DP】
#include<bits/stdc++.h>
using namespace std;
const int N=50;
int a[50],w[1500],n,m,f[N][N][N][N];
int main(void)
cin>>n>>m;
for(int i=0;i<n;i++) cin>>w[i];
while(m--)
int x; cin>>x;
a[x]++;
for(int A=0;A<=a[1];A++)
for(int B=0;B<=a[2];B++)
for(int C=0;C<=a[3];C++)
for(int D=0;D<=a[4];D++)
int &v=f[A][B][C][D];
int score=w[A+B*2+C*3+D*4];
v=score;
if(A) v=max(v,f[A-1][B][C][D]+score);
if(B) v=max(v,f[A][B-1][C][D]+score);
if(C) v=max(v,f[A][B][C-1][D]+score);
if(D) v=max(v,f[A][B][C][D-1]+score);
cout<<f[a[1]][a[2]][a[3]][a[4]];
return 0;
211. 计算系数【组合数】
#include<bits/stdc++.h>
using namespace std;
typedef long long int LL;
const int mod=10007;
LL a,b,k,n,m;
LL quick_mi(LL a,LL b,LL p)
LL sum=1;
while(b)
if(b&1) sum=sum*a%p;
b>>=1;
a=a*a%p;
return sum%p;
int main(void)
cin>>a>>b>>k>>n>>m;
LL sum1=quick_mi(a,n,mod)*quick_mi(b,m,mod);
for(int i=1,j=k;i<=n;i++,j--)
sum1=sum1*j%mod;
sum1=sum1*quick_mi(i,mod-2,mod)%mod;
cout<<sum1;
return 0;
496. 机器翻译【模拟】
#include<bits/stdc++.h>
using namespace std;
const int N=1e5+10;
int n,m,st[N],cnt;
deque<int>q;
int main(void)
cin>>m>>n;
for(int i=1;i<=n;i++)
int x; cin>>x;
if(!st[x]) st[x]=1,cnt++,q.push_back(x);
if(q.size()>m) st[q.front()]=0,q.pop_front();
cout<<cnt;
return 0;
148. 合并果子【哈夫曼树】
#include<bits/stdc++.h>
using namespace std;
int n,x,sum;
priority_queue<int,vector<int>,greater<int>>q;
int main(void)
cin>>n;
for(int i=0;i<n;i++) cin>>x,q.push(x);
while(q.size()>=2)
auto a=q.top(); q.pop();
auto b=q.top(); q.pop();
sum+=a+b;
q.push(a+b);
cout<<sum;
return 0;
507. 积木大赛【贪心】
#include<bits/stdc++.h>
using namespace std;
const int N=1e5+10;
int a[N],n;
int main(void)
cin>>n;
for(int i=1;i<=n;i++) cin>>a[i];
int sum=0;
for(int i=1;i<=n;i++)
if(a[i]>a[i-1]) sum+=a[i]-a[i-1];
cout<<sum;
return 0;
以上是关于寒假每日一题(提高组)Week 3 完结的主要内容,如果未能解决你的问题,请参考以下文章