/ Vijos / 题库 / 选数 /

题解

184 条题解

  • -1
    @ 2016-05-17 20:48:13

    辣鸡题目,不要去重,否则挂掉三个点。

    • @ 2016-08-22 23:29:10

      妈的 去重就死。

  • -1
    @ 2016-03-02 19:15:28

    五个点全wa.......求告知原因
    #include <iostream>
    #include <string.h>
    #include <stdlib.h>
    #include <stdio.h>
    #include <algorithm>
    #include <math.h>

    using namespace std;

    int ans = 0,n,k,a[25];
    bool check(int x){
    for(int i = 2;i <= sqrt(x);i ++){
    if(!x % i) return 0;
    }
    return 1;
    }

    void init(){
    scanf("%d%d",&n,&k);
    for(int i = 1;i <= n;i ++){
    scanf("%d",&a[i]);
    }
    }

    void dfs(int cnt,int i,int sum){
    if(i > n) return ;
    if(cnt == k){
    if(check(sum)) ans ++; return ;
    }
    dfs(cnt + 1,i + 1,sum + a[i]);
    dfs(cnt,i + 1,sum);
    }

    void solve(){
    dfs(0,1,0);
    printf("%d",ans);
    }

    int main(){
    init();
    solve();
    return 0;
    }

  • -1
    @ 2015-10-31 16:18:18

    一开始忘了要把freopen注释掉,得了WA。
    第二次果断过。
    这种题目提交两次也是醉了。

    代码

    #include<iostream>
    #include<cstdio>
    #include<cmath>
    using namespace std;
    int a[20],n,k;
    long long ans=0;
    int su(long long int m)
    {
    for(int i=2;i<sqrt(m);i++)
    if(m%i==0) return 0;
    return 1;
    }
    void dfs(int s,int ad,long long int t)
    {
    if(n-ad<k-s) return;
    if(s>=k)
    {
    if(su(t)==1) ans++;
    return;
    }
    for(int i=ad;i<n;i++)
    dfs(s+1,i+1,t+a[i]);
    return;
    }
    int main()
    {
    //freopen("choose.in","r",stdin);
    //freopen("choose.out","w",stdout);
    cin>>n>>k;
    for(int i=0;i<n;i++)
    cin>>a[i];
    dfs(0,0,0);
    cout<<ans<<endl;
    return 0;
    }

  • -1
    @ 2015-07-29 21:25:27

    不会做啊,哎!!好难

信息

ID
1128
难度
4
分类
搜索 | 搜索与剪枝 点击显示
标签
递交数
5808
已通过
2641
通过率
45%
被复制
27
上传者