vs2013做网站/微信朋友圈广告推广代理
感觉这次题出的还挺不错的,对于大佬可能比较简单了,看很多都AK了,但是对于我这种小白来说还是挺不错的,题目都比较巧妙,又不是特别难的数据结构。。
C.数字匹配
题目链接
思维题
#include<bits/stdc++.h>
using namespace std;
const int N=2005;
int n,k;
set<int>h;
int xx(int x)
{return x&((1<<k)-1);
}
bool check(int x,int y)
{h.clear();while(x>=(1<<(k-1))){h.insert(xx(x));x>>=1;}while(y>=(1<<(k-1))){if(h.count(xx(y)))return true;y>>=1;}return false;
}
int main()
{cin>>n>>k;int res=0;for(int i=1;i<n;i++){for(int j=i+1;j<=n;j++){if(check(i,j))res++;}}cout<<res<<endl;
}
I.体操队形
题目链接
一道签到题,但真的没想出来
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
const int N = 15;
int a[N];
int id[N];
int main()
{int n;cin>>n;for(int i=1;i<=n;i++){cin>>id[i];a[i]=i;}int res=0;do{int id2[N];for(int i=1;i<=n;i++){id2[a[i]]=i;}bool flag=false;for(int i=1;i<=n;i++){if(id2[i]>id2[id[i]]){flag=true;break;}}if(!flag)res++;}while(next_permutation(a+1,a+n+1));cout<<res<<endl;
}
F.过桥
算法:DP
这题就是典型的看着复杂,不好分析,但经过分析就会发现是一道很简单的dp
题目链接
#include<bits/stdc++.h>
using namespace std;
const int N = 2010;
int f[N],a[N];
int n;
int main()
{memset(f,0x3f,sizeof f);cin>>n;for(int i=1;i<=n;i++)cin>>a[i];f[1]=0;for(int i=1;i<=n;i++){if(a[i]<0)continue;for(int j=1;j<=a[i];j++){if(i+j<=n){f[i+j]=min(f[i]+1,f[i+j]);}}}if(f[n]==0x3f3f3f3f)cout<<-1<<endl;else cout<<f[n]<<endl;
}
B.跳跳跳
算法:基本区间dp
题目链接
#include<bits/stdc++.h>
using namespace std;
const int N = 2020;
typedef long long LL;
int n;
LL f[2*N][2*N],a[N*2];
int main()
{cin>>n;for(int i=1;i<=n;i++){cin>>a[i];a[i+n]=a[i];f[i][i]=f[i+n][i+n]=a[i];}for(int len=2;len<=n;len++){for(int i=1;i+len-1<=2*n-1;i++){int j=i+len-1;f[i][j]=max(f[i+1][j]+len*a[i],f[i][j-1]+len*a[j]);}}LL res=0;for(int i=1;i<=n;i++){res=max(res,(LL)f[i][i+n-1]);}cout<<res<<endl;
}