牛客周赛 Round 31 补题
牛客周赛 Round 31 补题
E-小红的子集取反
E-小红的子集取反_牛客周赛 Round 31 (nowcoder.com)
赛时一直往状压dp那方面想了,但其实用状压有点问题,就是
这道题我们可以设计dp数组
一开始把
接下来设计转移方程,很明显,
接下来判断出口,如果
推导完毕,AC代码如下
#include<bits/stdc++.h>
using namespace std;
#define INF 0x3f3f3f3f
#define int long long
using ull = unsigned long long;
using ll = long long;
using i128 = __int128_t;
using pii = pair<int,int>;
using psi = pair<string,int>;
constexpr ll MOD = 1e9+7;
//-------------------------------------------------------->>>>>>>>>>
const int N = 205;
const int M = 8e4+10;
int dp[N][M];
inline void solve(){
ms(dp,0x3f);
int n;
cin>>n;
int m=40000;
dp[0][m]=0;
for(int i=1;i<=n;i++){
int x;
cin>>x;
for(int j=0;j<=2*m;j++){
dp[i][j]=min({dp[i][j],dp[i-1][j-x],dp[i-1][j+x]+1});
}
}
if(dp[n][m]>n){
cout<<-1<<"\n";
}else{
cout<<dp[n][m]<<"\n";
}
}
inline void prework(){
}
signed main(){
ios::sync_with_stdio(false);
cin.tie(nullptr);cout.tie(nullptr);
cout<<fixed<<setprecision(12);
prework();
int T=1;
// cin>>T;
while(T--){
solve();
}
return 0;
}
F-小红的连续段
F-小红的连续段_牛客周赛 Round 31 (nowcoder.com)
很明显的隔板法
因为只有a,b两个数,所以我们a要分成的部分数aa就是
当然这只是压缩后的情况,所以我们在做完这一步之后还要swap一下aa和bb累加才是全部方案数
如何求划分呢?就是隔板法了,设a的数量是x,则x中间有x-1个空隙,那么把a划分成aa个部分的方案数就是从x-1个空中选aa-1个进行划分,即
AC代码如下:
#include<bits/stdc++.h>
using namespace std;
#define INF 0x3f3f3f3f
#define int long long
using ull = unsigned long long;
using ll = long long;
using i128 = __int128_t;
using pii = pair<int,int>;
using psi = pair<string,int>;
constexpr ll MOD = 1e9+7;
//-------------------------------------------------------->>>>>>>>>>
const int mod = 1e9+7;
const int N = 1e6+100;
int fac[N+2],invfac[N+2];
int qpow(int a,int b){
int res=1;while(b){if(b&1){res=res*a%mod;}a=a*a%mod;b>>=1;}return res;
}
int inv(int x){return qpow(x,mod-2);}
void init(int n){
fac[0] = 1;for (int i = 1; i <= n; ++i) fac[i] = fac[i - 1] * i % mod;
invfac[n] = inv(fac[n]);for (int i = n - 1; i >= 0; --i) invfac[i] = (invfac[i + 1] * (i + 1)) % mod;
}
int C(int n,int m){
if (n < m || m < 0) return 0;return fac[n]*invfac[m]%mod*invfac[n-m]%mod;
}
int A(int n,int m){
if (n < m || m < 0) return 0;return fac[n]*invfac[n-m]%mod;
}
inline void solve(){
int a,b;
cin>>a>>b;
for(int i=1;i<=a+b;i++){
int aa=i/2,bb=i-aa;
if(aa==0||bb==0){
cout<<0<<"\n";
continue;
}
int ans=0;
if(a>=aa&&b>=bb){
ans=(ans+C(a-1,aa-1)*C(b-1,bb-1)%mod)%mod;
}
swap(aa,bb);
if(a>=aa&&b>=bb){
ans=(ans+C(b-1,bb-1)*C(a-1,aa-1)%mod)%mod;
}
cout<<ans<<"\n";
}
}
inline void prework(){
init(1e6+10);
}
signed main(){
ios::sync_with_stdio(false);
cin.tie(nullptr);cout.tie(nullptr);
cout<<fixed<<setprecision(12);
prework();
int T=1;
// cin>>T;
while(T--){
solve();
}
return 0;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具