首页 > 其他分享 >洛谷 P1036 [NOIP2002 普及组] 选数(dfs)

洛谷 P1036 [NOIP2002 普及组] 选数(dfs)

时间:2022-09-05 20:47:34浏览次数:95  
标签:www 洛谷 NOIP2002 int 选数 LL P1036 dfs

https://www.luogu.com.cn/problem/P1036

题目大意:从给定的n个数中选出m个求和,结果是一个素数的情况有多少种?
输入
4 3
3 7 12 19
输出 
1

这个题目的代码是根据Acwing中蓝桥杯dfs专题 93.递归实现组合型枚举改动而来
https://www.acwing.com/problem/content/95/

模板如下:

dfs(1,1);
void dfs(int u,int st)
{
_____if(u==m+1) { for(1,m); …… ;return; }
_____for(int i=st;i<=n;i++) { way[i]=a[i]; dfs(u+1,i+1); way[i]=0; }
}

#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
typedef pair<int,int> PII;
const LL N=200200,M=2002;
const int INF=0x3f3f3f3f;
LL n,m,ans=0;
LL a[N],way[N];
bool is_prime(LL x)
{
    if(x<2) return false;
    for(LL i=2;i<=x/i;i++)
        if(x%i==0) return false;
    return true;
}
void dfs(LL u,LL st)
{
    if(u==m+1)
    {
        LL sum=0;
        for(LL i=1;i<=m;i++)
            sum+=way[i];
        if(is_prime(sum)==true) ans++;
        return ;
    }
    for(LL i=st;i<=n;i++)//从当前位置继续往后拼凑
    {
        way[u]=a[i];
        dfs(u+1,i+1);
        way[u]=0;//状态回溯
    }
}
int main()
{
    cin.tie(0); cout.tie(0); ios::sync_with_stdio(false);
    LL T=1;
    //cin>>T;
    while(T--)
    {
        cin>>n>>m;
        for(LL i=1;i<=n;i++)
            cin>>a[i];
        dfs(1,1);//从第一个位置开始填放,从数组a中的第一个数开始填
        cout<<ans<<endl;
    }
    return 0;
}

标签:www,洛谷,NOIP2002,int,选数,LL,P1036,dfs
From: https://www.cnblogs.com/Vivian-0918/p/16659475.html

相关文章

  • 洛谷P1558 色板游戏 题解
    高考完后随机跳题的复建运动。看到区间覆盖操作考虑线段树。30种颜色?用位运算存储节省空间。因为在线段树上传合并时只需要考虑这一段是否存在该颜色,(即\(0\)或\(1\))具体......
  • 洛谷P1850 [NOIP2016 提高组] 换教室(期望dp)
    #include<bits/stdc++.h>usingnamespacestd;intn,m,v,e;intc[3005],d[3005];intf[305][305];doubledp[3005][3005][2];//dp[i][j][k]表示前i步申请更换了j......
  • 洛谷P7907 [Ynoi2005] rmscne
    数据结构好题首先将询问离线,扫描线扫答案区间的左端点。设和\(l\)颜色相同的下一个位置为\(x\)。那么对于左端点\(\leql\),\(l\leq\)右端点$<x$的询问,\(l\)......
  • 洛谷深基hash表
    洛谷深基hash表字符串哈希给定N个字符串(第i个字符串长度为Mi,字符串内包含数字、大小写字母,大小写敏感),请求出N个字符串中共有多少个不同的字符串。我们不妨先分......
  • [洛谷P5787] 线段树时间分治
    题目大意给\(n\)个点\(m\)条边,在\(k\)时间内,第\(i\)条边只在\([l_i+1,r_i]\)的时间范围内存在。对于每个\(i\leqk\),输出\(i\)时刻这个图是否是二分图。题......
  • 学习随笔——洛谷题目P1636解答
    摘要:欧拉图的应用。题目原地址如下:https://www.luogu.com.cn/problem/P1636题目截图如下:  一笔画问题,考察欧拉回路的定义,即所有节点的入度出度的和都为偶数即可满足......
  • 洛谷 P6862 [RC-03] 随机树生成器 绿 题解
    前言模数要模\(1e9+9\)!!模数要模\(1e9+9\)!!模数要模\(1e9+9\)!!结论\(n\)个点的树的形态有\((n-1)!\)个,对于节点\(k\),它的所有度数和为\((n-1)!\left(\sum\limits_{......
  • P1002 [NOIP2002 普及组] 过河卒 题解
    题目:[NOIP2002普及组]过河卒题目描述棋盘上\(A\)点有一个过河卒,需要走到目标\(B\)点。卒行走的规则:可以向下、或者向右。同时在棋盘上\(C\)点有一个对方的马,该......
  • 洛谷 P8496 [NOI2022] 众数 题解
    最近7年最水的D1T1。用权值线段树维护每个数出现的次数,链表维护序列。操作4即合并两棵权值线段树、两个链表,操作2就是删除链表尾的元素并在权值线段树上修改。显......
  • 洛谷-P5058 嗅探器
    嗅探器tarjan割点考虑以\(a\)作为根进行一次\(tarjan\)的搜索,会发现只有到\(b\)的路径上的割点才有可能是最终的答案因此考虑一边标记这个路径,一边在这个路径上......