您的位置:首页 > 其它

【CQ18阶梯赛第8场】题解

2018-03-11 15:48 330 查看
【A:HDU2032 杨辉三角】:

简单的递推,或者是基础的DP;

但是只有杨润东一个人1A,整体准确率只有8/37,具体原因不详。

经验:提交前一定要试一下比较特殊的数据或者最大的数据。其次,为了保险,一定要严格按照格式来输出。

最后,数组最好定义为全局变量,i,j等定义为局部变量。

#include<bitset>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
bool ans[55][55][55];
bitset<90>s[20];
int a[60],N;
int read()
{
char c=getchar(); int res;
while(c>'9'||c<'0') c=getchar();
for(res=0;c>='0'&&c<='9';c=getchar()) res=(res<<3)+(res<<1)+c-'0';
return res;
}
void solve(int x,int y,int z)
{
for(int i=0;i<=11;i++) s[i].reset();
s[0][0]=1;
for(int i=1;i<=N;i++){
if(i==x||i==y||i==z||a[i]>87) continue;
for(int j=10;j>=1;j--) s[j]|=s[j-1]<<a[i];
}
if(s[10][87]==1) ans[x][y][z]=true;
else ans[x][y][z]=false;
}
int main()
{
int T,Q;
T=read();
while(T--){
scanf("%d",&N);
for(int i=1;i<=N;i++)
a[i]=read();

for(int i=1;i<=N;i++)
for(int j=i;j<=N;j++)
for(int k=j;k<=N;k++)
solve(i,j,k);

Q=read();
while(Q--){
int x[3];
x[0]=read(); x[1]=read(); x[2]=read();
sort(x,x+3);
if(ans[x[0]][x[1]][x[2]]) puts("Yes");
else puts("No");
}
}
return 0;
}


View Code

总结:提交前,一定要分析的东西,数据范围;算法效率是否妥当。

然后,多刷题,如果可以在HDU上面刷500题,或者BZOJ上面刷100道题,稳稳地拿省一(对弱省来说)。

当然,要学会挑战难题,突破自己。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: