寒假每日一题(提高组)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 完结的主要内容,如果未能解决你的问题,请参考以下文章

寒假每日一题(提高组)Week 4 完结

寒假每日一题(提高组)Week 1 完结

寒假每日一题(入门组)week2 完结

寒假每日一题(入门组)week3 完结

寒假每日一题(入门组)week7 完结

寒假每日一题(入门组)week4 完结