计蒜客习题:买书

    xiaoxiao2025-03-13  58

    思路:

    其实就是一个部分和(从a1,a2,a3…an中选取若干数,使得和为k)的变式,(相当于规定只能选多少个数)

    代码:(有注释)

    #include<cstdio> #include<cmath> #include<cstring> #include<algorithm> #include<iostream> using namespace std; int m,n,k; int a[50]; //ll sum = 0; ///从前i项得到和为sum,然后对i项后进行分支() bool dfs(int i,int sum,int c){ ///在n本书中选,选了k本书就停了,再判断结果是否刚好相等 if(i==n || c==k)///这里条件不能少且不能是&& return sum==m ; ///不加上a[i] if(dfs(i+1,sum,c)) return true; ///加上a[i] if(dfs(i+1,sum+a[i],c+1)) return true; return false; } int main(){ scanf("%d%d%d",&m,&n,&k); for(int i = 0;i<n;i++) scanf("%d",&a[i]); if(dfs(0,0,0)) printf("Yes\n"); else printf("No\n"); return 0; }
    最新回复(0)