https://www.acwing.com/problem/content/1373/
1、暴搜写法超时
1 #include<iostream> 2 using namespace std; 3 const int N=30; 4 int a[N]; 5 int v,n; 6 int res=0; 7 void dfs(int sum,int now){ 8 if(sum>=n){ 9 if(sum==n){ 10 res++; 11 } 12 return; 13 } 14 for(int i=now;i<v;i++){ 15 // sum+=a[i]; 16 dfs(sum+a[i],i); 17 } 18 } 19 int main(void){ 20 cin>>v>>n; 21 for(int i=0;i<v;i++){ 22 cin>>a[i]; 23 } 24 dfs(0,0); 25 cout<<res; 26 return 0; 27 }
2、抽象为完全背包问题
1 #include<iostream> 2 using namespace std; 3 typedef long long LL; 4 const int N=30; 5 LL f[N][10010]; 6 int main(void){ 7 int v,n; 8 cin>>v>>n; 9 f[0][0]=1; 10 for(int i=1;i<=v;i++){ 11 int t; 12 cin>>t; 13 for(int j=0;j<=n;j++){ 14 f[i][j]=f[i-1][j]; 15 for(int k=1;k<=j/t;k++){ 16 f[i][j]+=f[i-1][j-k*t]; 17 } 18 } 19 } 20 cout<<f[v][n]; 21 return 0; 22 }
3、完全背包问题优化
1 #include<iostream> 2 using namespace std; 3 typedef long long LL; 4 const int N=30; 5 LL f[N][10010]; 6 int main(void){ 7 int v,n; 8 cin>>v>>n; 9 f[0][0]=1; 10 for(int i=1;i<=v;i++){ 11 int t; 12 cin>>t; 13 for(int j=0;j<=n;j++){ 14 f[i][j]=f[i-1][j]; 15 if(j>=t) f[i][j]+=f[i][j-t]; 16 } 17 } 18 cout<<f[v][n]; 19 return 0; 20 }
优化为一维空间
1 #include<iostream> 2 using namespace std; 3 typedef long long LL; 4 const int N=30; 5 LL f[10010]; 6 int main(void){ 7 int v,n; 8 cin>>v>>n; 9 f[0]=1; 10 for(int i=1;i<=v;i++){ 11 int t; 12 cin>>t; 13 for(int j=0;j<=n;j++){ 14 if(j>=t) f[j]+=f[j-t]; 15 } 16 } 17 cout<<f[n]; 18 return 0; 19 }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 因为Apifox不支持离线,我果断选择了Apipost!
· 通过 API 将Deepseek响应流式内容输出到前端