比赛 |
noip |
评测结果 |
RRRRRRRRRRRRRRRRRRRR |
题目名称 |
__完全平方数 |
最终得分 |
0 |
用户昵称 |
jiazihankk |
运行时间 |
0.084 s |
代码语言 |
C++ |
内存使用 |
3.14 MiB |
提交时间 |
2016-11-04 21:56:12 |
显示代码纯文本
- #include<cstdio>
- #include<algorithm>
- #include<cstring>
- #define rep(i,k,n) for(int i=k;i<=n;i++)
- using namespace std;
- const int inf=0x3f3f3f3f;
- const int M=67777;
- const int N=16;
- int f[10][M],x[N],y[N],K,n,m,S,val[M],ans;
- void init(int s){
- int mi_x,mx_x,mi_y,mx_y;
- mi_x=mi_y=M;
- mx_x=mx_y=-1;
- rep(i,0,n-1)if((s>>i)&1){
- mi_x=min(mi_x,x[i]);
- mi_y=min(mi_y,y[i]);
- mx_x=max(mx_x,x[i]);
- mx_y=max(mx_y,y[i]);
- }mi_x--,mi_y--;
- val[s]=2*(mx_x-mi_x + mx_y-mi_y);
- }
- int main(){
- freopen("xfence.in","r",stdin);
- freopen("xfence.out","w",stdout);
- scanf("%d%d%d",&m,&K,&n);
- memset(f,0x3f,sizeof(f));
- rep(i,0,n-1)scanf("%d%d",&x[i],&y[i]);
- S=(1<<n)-1;
- rep(i,1,S)init(i),f[1][i]=val[i];
- ans=val[S];
-
- rep(k,1,(K+1)/2-1){memcpy(f[k+1],f[k],sizeof(f[k]));
- rep(s,1,S){int res=f[k][s];
- int u=S^s;
- for(;u;u-=(u&-u))f[k+1][s^u]=min(f[k+1][s^u],res+val[u]);
- }
- }
- rep(k,1,(K+1)/2){
- rep(s,1,S)
- ans=min(ans,f[k][s]+f[K-k][S^s]);
- }
- printf("%d\n",ans);
- }