OpenJudge 7384(分成互质组)

应hfu要求,近几日整理搜索专题的内容,无意中翻出了一年前死活A不掉的一道不可做题(当时觉得)。看着自己的代码风格变化天翻地覆,无奈感叹时间飞逝。。。算了少矫情管他的先A了再说(ง •̀_•́)ง

先附上一年前WA(8/10)的代码

#include<stdio.h>
int n,divide[15][10],sum[15]={0},t,a[15],num1,ans=0;
int prime(int a,int b)
{
    if (a==b) return 0;
    for (int s=2;s<=a/2;s++)
      if (a%s==0&&b%s==0) return 0;
    return 1;
}
void f(int p,int q)
{
    if (ans!=0) return ;
    if (num1==n) 
    {
        ans=q;
        return ;
    }
    int i;
    for (i=1;i<=q;i++)
    {
        int j;
        for (j=1;j<=sum[i];j++)
          if (prime(a[p],divide[i][j])==0) break;
        if (j==sum[i]+1)
        {
            divide[i][sum[i]+1]=a[p];sum[i]++;num1++;
            for (int k=1;k<=q-1;k++)
              for (int b=1;b<=q-k;b++)
              if (sum[b]<sum[b+1])
              {
                for (int h=1;h<=sum[b+1];h++)
                {
                    t=divide[b][h];divide[b][h]=divide[b+1][h];divide[b+1][h]=t;
                } 
                t=sum[b];sum[b]=sum[b+1];sum[b+1]=t;
              }
            break;
        } 
    }
    if (i==q+1)
    {
        divide[q+1][1]=a[p];sum[q+1]++;num1++;
    }
    if (i==q+1) f(p+1,q+1);
    if (i<q+1) f(p+1,q);
}
int main()
{
    scanf("%d",&n);
    for (int i=1;i<=n;i++)
      scanf("%d",&a[i]);
    divide[1][1]=a[1];sum[1]=1;num1=1;
    f(2,1);
    printf("%d",ans);
    return 0;
}

再来看看一年后的今天1A的代码

#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<vector>
using namespace std;
int n;
int a[12],cnt=0,mn=12;
int gcd(int a,int b) {
    return !b?a:gcd(b,a%b);
}
vector<int> G[12];
void dfs(int p) {
    if (p>n) {mn=min(mn,cnt);return ;}
    for (int i=1;i<=cnt;++i) {
        bool f=true;
        for (int j=0;j<G[i].size();++j)
            if (gcd(a[p],a[G[i][j]])^1) {f=false;break;}
        if (f) {
            G[i].push_back(p);
            dfs(p+1);
            G[i].pop_back();
        }
    }
    ++cnt;
    G[cnt].push_back(p);
    dfs(p+1);
    G[cnt].pop_back();
    --cnt;
}
int main() {
//  freopen("OJ 7384.in","r",stdin);
    scanf("%d",&n);
    for (int i=1;i<=n;++i) scanf("%d",&a[i]);
    dfs(1);
    printf("%d\n",mn);
    return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
运行环境: ASP/Access 软件大小: 73kb 该微信息发布系统只有72KB大小,非常简洁,希望你喜欢。 经过多日反复改进,增加了分类,并可以在OPERA,firefox,360,IE8等正常显示。 另外对数据库重新设计制作。以及页面JS需要调用的ID名称都转小写了。 V2.8 说明 1. 会员系统完整 包含完整的会员系统:注册,邮件验证激活,登录,邮件找回密码,修改密码。验证码验证,密码MD5加密。 2. 前台展示系统 简单而整洁,页面效果自认为很好,只由列表页和展示页成。首页集成信息搜索功能。 ajax载入联系方式,载入接口post方式获得,并且防止外站调用。 如果浏览器不支持JS,也可以点击按钮POST显示联系方式。 展示页右侧是根据标题模糊匹配的相关职位信息。 还有增加了分类功能:发布信息修改信息等。 3. 信息发布系统 后台,先完善联系信息后才可以发布和管理信息。邮件验证过的可以直接发布显示,邮件验证没有通过的,能显示,但排在最后。 JS特效验证,体验效果极佳。 4. 信息管理系统 用户可以自己设置信息是否显示,编辑联系信息。另外,管理员设置的五个状态不同的操作权限。 删除,不可以任何编辑; 发回修改,只能修改; 审核中,前台显示在最后页,并有修改。 审核通过,有刷新时间,不能修改。 管理员推荐,可以刷新时间,不能修改。 5.管理员拥有信息管理和修改,用户资料的操作等权限,以及分类管理。 6.内有根据手机号码归属地来自动审核的代码,以及根据电话号码显示是否外地号码的代码,供学习. 7.已对页脚以及搜索等部件用SUB调用方便修改,更多体验请下载测试或者访问展示网址。 前台和后台帐号admin@ewuyi.net 密码253252545 使用前请修改config.asp的各项参数,使用方正常

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值