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

Posted 辉小歌

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了寒假每日一题(入门组)week4 完结相关的知识,希望对你有一定的参考价值。

目录

1353. 滑雪场设计【枚举】


https://www.acwing.com/problem/content/1355/

#include<bits/stdc++.h>
using namespace std;
const int N=1e5+10;
int h[N],n,ans=1e9;
int main(void)

    cin>>n;
    for(int i=0;i<n;i++) cin>>h[i];
    for(int i=0;i<=83;i++)
    
        int l=i,r=i+17,temp=0;
        for(int j=0;j<n;j++) 
            if(h[j]<l||h[j]>r) 
            
                int x=min(abs(h[j]-l),abs(h[j]-r));
                temp+=x*x;
            
        ans=min(ans,temp);
    
    cout<<ans;
    return 0;

1603. 整数集合划分【贪心】


https://www.acwing.com/problem/content/1605/

#include<bits/stdc++.h>
using namespace std;
const int N=1e5+10;
int a[N],n,sum1,sum2;
int main(void)

    cin>>n;
    for(int i=0;i<n;i++) cin>>a[i];
    sort(a,a+n);
    for(int i=0;i<n/2;i++) sum1+=a[i];
    for(int i=n/2;i<n;i++) sum2+=a[i];
    cout<<(n%2?1:0)<<" "<<sum2-sum1;
    return 0;

482. 合唱队形【DP】


https://www.acwing.com/problem/content/484/

#include<bits/stdc++.h>
using namespace std;
const int N=1e3+10;
int a[N],f1[N],f2[N],n;
int main(void)

    cin>>n;
    for(int i=1;i<=n;i++) cin>>a[i];
    for(int i=1;i<=n;i++)
    
        f1[i]=1;
        for(int j=1;j<i;j++) if(a[j]<a[i]) f1[i]=max(f1[i],f1[j]+1);
    
    int ans=0;
    for(int i=n;i>=1;i--)
    
        f2[i]=1;
        for(int j=n;j>i;j--) if(a[i]>a[j]) f2[i]=max(f2[i],f2[j]+1);
        ans=max(ans,f1[i]+f2[i]-1);
    
    cout<<n-ans;
    return 0;

420. 火星人


https://www.acwing.com/problem/content/422/

#include<bits/stdc++.h>
using namespace std;
int a[10005],n,m;
int main(void)

    cin>>n>>m;
    for(int i=0;i<n;i++) cin>>a[i];
    for(int i=0;i<m;i++) next_permutation(a,a+n);
    for(int i=0;i<n;i++) cout<<a[i]<<" ";
    return 0;

1015. 摘花生【DP】


https://www.acwing.com/problem/content/1017/

#include<bits/stdc++.h>
using namespace std;
const int N=110;
int f[N][N],n,m,t;
int main(void)

    cin>>t;
    while(t--)
    
        cin>>n>>m;
        for(int i=1;i<=n;i++)
            for(int j=1;j<=m;j++)
                    cin>>f[i][j],f[i][j]+=max(f[i-1][j],f[i][j-1]);
        cout<<f[n][m]<<endl;
    
    return 0;

126. 最大的和【思维】


https://www.acwing.com/problem/content/128/

#include<bits/stdc++.h>
using namespace std;
const int N=110;
int f[N][N],n;
int main(void)

    cin>>n;
    for(int i=1;i<=n;i++)
    
        for(int j=1;j<=n;j++)
        
            cin>>f[i][j];
            f[i][j]+=f[i-1][j];//列的前缀和
        
    
    int ans=-1e4;
    for(int i=1;i<=n;i++)//枚举两条边
    
        for(int j=i;j<=n;j++)
        
            int a=0;
            for(int k=1;k<=n;k++)//将一列压缩为一个数,求最大的一段的和
            
                int b=f[j][k]-f[i-1][k];
                a=max(a,0)+b;
                ans=max(ans,a);
            
        
    
    cout<<ans;
    return 0;

以上是关于寒假每日一题(入门组)week4 完结的主要内容,如果未能解决你的问题,请参考以下文章

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

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

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

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

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

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