回溯01
来源:互联网 发布:unity3d 刚体移动 编辑:程序博客网 时间:2024/05/17 14:18
#include <stdio.h>#include <string.h>#include <algorithm>using namespace std;int VM[209][2009];int n=0,m=0,w[209],v[209],result[209]={0},best=0,sum=0,x[209]={0};int Constraint(int t){ if (w[t]>m) return 0; else return 1;}int Bound(int t){ int s=0,l=0; for (int i=0;i<=t;i++) if (x[i]==1) {s=s+w[i];l=l+v[i];} if (s>m) return 0; else return 1;}void Backtrack(int t){ if (t>=n) { int sm=0; sum=0; for (int i=0;i<n;i++) { sm=sm+x[i]*w[i]; if (sm>m) return ; if (x[i]==1) sum=sum+v[i]; } if (sum>best) { best=sum; for (int i=0;i<n;i++) result[i]=x[i]; } return ; } else for (int i=0;i<=1;i++) { x[t]=i; if (Bound(t)&&Constraint(t)) Backtrack(t+1); }}main(){ memset(VM,0,sizeof(VM)); freopen("input.txt","r",stdin); scanf("%d",&m);scanf("%d",&n); for (int i=0;i<n;i++) { scanf("%d",&w[i]); scanf("%d",&v[i]); } best=1000; Backtrack(0); printf("%d",best);printf("\n"); for (int i=0;i<n;i++) { printf("%d ",i+1); printf("%d\n",result[i]); } fclose(stdin);}
0 0
- 回溯01
- 回溯 01 背包
- 回溯法 01背包
- 01背包回溯法
- 回溯-01背包问题
- 01背包-回溯算法
- 回溯
- 回溯
- 回溯
- 回溯
- 回溯
- 回溯
- 回溯
- 回溯
- 回溯
- 回溯
- 回溯
- 回溯
- 强制IE使用兼容模式
- 杭电 1042N!
- 多机调度
- 使用JavaMail发送邮件
- asp.net mvc 中的Form身份认证
- 回溯01
- java学习记录(四):关于匿名内部类和局部内部类只能访问final变量的问题
- 乐观的人用乐观锁?
- redis问题:MISCONF Redis is configured to save RDB snapshots
- ORACLE常用SQL语句大全
- 彻底学会使用epoll(一)——ET模式实现分析
- [Network]Introduction and Basic concepts
- poll&&epoll实现分析(一)——poll实现
- Node 即学即用 笔记 思维导图