C语言算法训练第十一天,如何为?

摘要:C++算法算法训练第十一天 以下为牛客挑战 今日收获 学到了状态压缩dp,这个是选或者不选两种情况所有数的情况。 for(int i=0;i<(1LL<&
C++算法算法训练第十一天 以下为牛客挑战 今日收获 学到了状态压缩dp,这个是选或者不选两种情况所有数的情况。 for(int i=0;i<(1LL<<n);i++){ } __builtin__popcount(i);统计i中二进制的个数,可以用于判断有没有选到这么多。 if(i>>j&1)continue;这个是第被选了就下一个,这个是右移移动到最后一个看看是不是1 牛客练习赛148 签到题 A-签到题_牛客练习赛148 (nowcoder.com) 2 1 2 解题代码 #include<bits/stdc++.h> #define int long long #define lll __uint128_t #define PII pair<int ,int> #define endl '\n' using namespace std; #define yn(ans) printf("%s\n", (ans)?"Yes":"No");//快速打印 #define YN(ans) printf("%s\n", (ans)?"YES":"NO"); #define REP(i, e) for (int i = 0; i < (e); ++i) #define REP1(i, s, e) for (int i = (s); i <=(e); ++i) #define TESTS int t; cin >> t; while (t--) #define TEST const int N=2e5+10,M=1e3+10,mod=1e9+7; int a[N],b[N],c[N],pre[N]; signed main(){ std::ios::sync_with_stdio(false); cin.tie(0); cout.tie(0); int n; cin>>n; for(int i=1;i<=n;i++){ cout<<i<<" "; } return 0; } Bob的蛋糕店 状态压缩 DP B-Bob的蛋糕店_牛客练习赛148 (nowcoder.com) 2 1 1 1 No 这个题我不会一开始,但是我看了大佬的怎么解。 这个题用是数轴,我们可以假设给数轴的点全部搞成0,选了的搞成1; 这样的话一个位置就有两个可能,选或者不选,那一共有2的n次方的选择 也就是1LL<<n,1向右移动n个单位 1<<3 1000-->2的3次方。 所以我们可以去枚举所有的方法,比如枚举到i,---》这个也相当于一个状态。,相当于把1的选完了,剩下的枚举长度, if(i>>j&1)continue;//遇到1的直接不要加上 这里一个很关键的函数 __builtin_popcount(i),统计i中y1的个数,是一个数二进制1的个数 我们可以用这个来判断到底选了多少。
阅读全文