zoukankan      html  css  js  c++  java
  • JZ初中OJ 1564. [GDKOI]旅游

    题目描述

        输入N个数,从中选择一些出来计算出总和,问有多少种选法使得和为质数。
     

    输入

    第一行一个整数N。

    第二行N个整数,表示这N个数的值。

    输出

        一个整数,表示方案数。
     

    样例输入

    4
    1 1 2 7
    

    样例输出

    5
    
     

    数据范围限制

     
     

    提示

    【样例解释】

       一共有12种选法:(1,1,2,7),(1,2,7),(2,7),(1,1,7),(1,7),(7),(1,1,2),(1,2),(2),(1,1),(1)和(),其中(1,1,2,7),(7),(1,2),(1,1),(2)为5种正确选法。

    【限制】

    1<=N<=50。

    每个数不超过10,000。
     1 #include<bits/stdc++.h>
     2 using namespace std;
     3 struct s
     4 {
     5     long long b;
     6     int g;
     7 }a[100];
     8 bool cmd(s x,s y)
     9 {
    10     return x.b<x.b;
    11 }
    12 bool zs[600000],sf[10001];
    13 long long n,all,x,ans,maxn,f[510000];
    14 void zhishu()
    15 {
    16     for(int i=2;i<=600000;i++)
    17     {
    18         if(zs[i]==0)
    19         {
    20             int l=2;
    21             while(i*l<=600000)
    22             {
    23                 zs[i*l]=1;
    24                 l++;
    25             }
    26         }
    27     }
    28     zs[1]=1;
    29     zs[0]=1;
    30 }
    31 int main()
    32 {
    33     zhishu();
    34     cin>>n;
    35     for(int i=1;i<=n;i++)
    36     {
    37         cin>>x;
    38         if(sf[x]==0)
    39         {
    40             a[++all].g=1;
    41             a[all].b=x;
    42             sf[x]=1;
    43         }
    44         else
    45             for(int j=1;j<=all;j++)
    46                 if(a[j].b==x)
    47                     a[j].g++;
    48     }
    49     f[0]=1;
    50     sort(a+1,a+1+all,cmd);
    51     for(int i=1;i<=all;i++)
    52     {
    53         for(int j=maxn;j>=0;j--)
    54         {
    55             for(int k=1;k<=a[i].g;k++)
    56             {
    57                 f[j+a[i].b*k]+=f[j];
    58             }
    59         }
    60         maxn+=a[i].b*a[i].g;
    61     }
    62     for(int i=1;i<=maxn;i++)
    63     {
    64         if(zs[i]==0)
    65             ans+=f[i];
    66     }
    67     cout<<ans;
    68     return 0;
    69 }
  • 相关阅读:
    windows 物理内存获取
    windbg-.process切换进程(内核)
    cnetos 6.7彻底解决vmware NAT网络问题
    优秀的博客链接地址
    使用Spring MVC统一异常处理实战
    active mq 配置
    socket demo程序
    flume 中的 hdfs sink round 和roll
    软链接与硬链接
    flume A simple example
  • 原文地址:https://www.cnblogs.com/dsanying/p/11317193.html
Copyright © 2011-2022 走看看