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