01背包模板动态规划
来源:互联网 发布:帝国cms 搜索代码 编辑:程序博客网 时间:2024/05/17 20:31
以下附一维AC码:
#include<cstdio>#include<cstdlib>#include<cstring>#include<cmath>#include<iostream>#include<algorithm>using namespace std;struct node{ int w,v;}a[101];int f[101];int p[101][101];int w,n;void work(){ for(int i=1;i<=n;i++) for(int j=w;j>=a[i].w;j--) for(int k=0;k<=j/a[i].w;k++) if(f[j-k*a[i].w]+k*a[i].v>f[j]){ f[j]=f[j-k*a[i].w]+k*a[i].v; p[i][j]=k;}}void out(){ printf("%d\n",f[w]); int j=w; for(int i=n;i>=1;i--){ if(p[i][j]) printf("%d*%d ",i,p[i][j]); j-=p[i][j]*a[i].w;}}int main(){scanf("%d%d",&w,&n);for(int i=1;i<=n;i++) scanf("%d%d",&a[i].w,&a[i].v); work(); out();}
以下附二维AC码:
#include<cstdio>#include<cstdlib>#include<cstring>#include<cmath>#include<iostream>#include<algorithm>using namespace std;struct node{ int w,v;}a[101];int f[101][101];int p[101][101];int w,n;void work(){ for(int i=1;i<=n;i++) for(int j=1;j<=w;j++) for(int k=0;k<=j/a[i].w;k++) if(f[i-1][j-k*a[i].w]+k*a[i].v>f[i][j]){ f[i][j]=f[i-1][j-k*a[i].w]+k*a[i].v; p[i][j]=k;}}void out(){ printf("%d\n",f[n][w]); int j=w; for(int i=n;i>=1;i--){ if(p[i][j]) printf("%d*%d ",i,p[i][j]); j-=p[i][j]*a[i].w;}}int main(){scanf("%d%d",&w,&n);for(int i=1;i<=n;i++) scanf("%d%d",&a[i].w,&a[i].v); work(); out();}
0 0
- 01背包模板动态规划
- 【动态规划】【背包模板】
- 动态规划之01背包,完全背包,多重背包模板
- 动态规划(1)-01背包【模板】
- 【个人模板】 动态规划01背包
- POJ3624Charm Bracelet(动态规划(DP)01背包模板)
- 动态规划 01背包
- 01背包-动态规划
- 01背包动态规划
- 01背包 动态规划
- 01背包动态规划
- 01背包 动态规划
- 动态规划01背包
- 动态规划01背包
- 动态规划01背包
- 动态规划-01背包
- 动态规划:01背包
- 动态规划 01背包
- java定时器
- O(1)快速乘
- Kafka原理简介
- 算法提高 超级玛丽
- word 当前页插入页眉、页脚、页码。要求奇偶页眉不同,而页码连续。
- 01背包模板动态规划
- 117. Populating Next Right Pointers in Each Node II
- VC++ 数据 写入EXCEL文档
- Android案例—装备选择
- java多线程--停止一个线程的方法小结(来自java多线程编程核心技术)
- Spark RDD中的aggregate函数 -JAVA8 lambda风格实现求平均数(不用mean函数)
- leetcode 104. Maximum Depth of Binary Tree
- Lucene初探之索引过程分析(一)
- Struts2 环境搭建