codeforces 383D
题意:
给你一个长为n的正整数数组,你要选一个连续子序列,对其每个元素加上正号或者负号,使其和为0,求方案数
题解:
dp( i , j , k )表示dp到第i个,和为j,这个元素是选了正还是负
滚动数组优化
1 #include<bits/stdc++.h> 2 #define ll long long 3 #define maxn 1005 4 #define maxm 10005 5 using namespace std; 6 const ll mod = 1000000007; 7 int n,a[maxn]; 8 ll dp[2][3][maxm*2]; 9 int main() 10 { 11 scanf("%d",&n); 12 for(int i=1;i<=n;++i)scanf("%d",&a[i]); 13 ll ans=0; 14 for(int i=1;i<=n;++i) 15 { 16 int now=i&1,pre=now^1; 17 memset(dp[now],0,sizeof(dp[now])); 18 dp[now][1][10005+a[i]]=1;dp[now][2][10005-a[i]]=1; 19 for(int k=1;k<=2;++k) 20 for(int j=0;j<maxm*2;++j)if(dp[pre][k][j]) 21 { 22 dp[now][1][j+a[i]]=(dp[now][1][j+a[i]]+dp[pre][k][j])%mod; 23 dp[now][2][j-a[i]]=(dp[now][2][j-a[i]]+dp[pre][k][j])%mod; 24 } 25 for(int k=1;k<=2;++k)ans=(ans+dp[i&1][k][10005])%mod; 26 } 27 printf("%I64d\n",ans); 28 return 0; 29 }
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 深入理解 Mybatis 分库分表执行原理
· 如何打造一个高并发系统?
· .NET Core GC压缩(compact_phase)底层原理浅谈
· 现代计算机视觉入门之:什么是图片特征编码
· .NET 9 new features-C#13新的锁类型和语义
· Sdcb Chats 技术博客:数据库 ID 选型的曲折之路 - 从 Guid 到自增 ID,再到
· 语音处理 开源项目 EchoSharp
· 《HelloGitHub》第 106 期
· Spring AI + Ollama 实现 deepseek-r1 的API服务和调用
· 使用 Dify + LLM 构建精确任务处理应用