SDNU——1043.采药2(动态规划——完全背包)
2016-11-20 23:04
183 查看
sdnu的采药2,这个也是鼓捣了好几天,后来发现会手敲完全背包不会敲01了。。。找个时间再复习复习。
这个存板子吧,毕竟自己手打的,应该算比较合手的。
先贴代码
![](https://img-blog.csdn.net/20161120230643714?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
这里用了2,然后后面
![](https://img-blog.csdn.net/20161120230744560?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
![](https://img-blog.csdn.net/20161120230804070?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
每一行都继承上一行的数据,这样就不用开一个很大的数组了,有效节约内存空间。
这个存板子吧,毕竟自己手打的,应该算比较合手的。
先贴代码
#include<cstdio> #include<iostream> #include<cstring> using namespace std; int maxx(int a, int b) { if(a >= b) return a; else return b; } int main() { int f[2][10000+5] = {0}; int weight[1000+5],value[1000+5]; int c = 1, d = 0, e; int w, k, j; int rongliang, zhongshu; while(scanf("%d %d",&rongliang,&zhongshu) != EOF) { for(int q = 1; q <= zhongshu; q++) { scanf("%d %d",&weight[q],&value[q]); }
//上面是先输入数据,包括每种药材的价值和重量 for(j = 1; j <= zhongshu; j++) { for(w = 1; w <= rongliang; w++) f[c][w] = f[d][w]; for(k = 1; k <= rongliang; k++)//开始遍历 先从第一类开始,j、k都是1是因为输入数据的时候下标就是从1开始的 { if(weight[j] <= k)//能装进去的话 f[c][k] = maxx(f[d][k],f[c][k-weight[j]]+value[j]);//状态转移方程 //printf("f[%d][%d] == %d\n",c,k,f[c][k]);// } e = c; c = d; d = e; } printf("%d\n",f[e][k-1]); } return 0; }这个里面比较出彩的地方在于
这里用了2,然后后面
每一行都继承上一行的数据,这样就不用开一个很大的数组了,有效节约内存空间。
相关文章推荐
- SDNU 1043.采药2 完全背包
- SDNU1043.采药2【完全背包】
- 动态规划学习之0-1背包和完全背包
- 动态规划(2)-完全背包【模板】
- 【HIHOCODER 1043】题目1 : 完全背包
- 算法竞赛入门经典:第九章 动态规划初步 9.2完全01背包
- P1616 疯狂的采药(完全背包)
- 动态规划之完全背包问题杭电1114
- 疯狂的采药(完全背包)
- 动态规划—完全背包
- 【动态规划】完全背包
- HDOJ 题目1114Piggy-Bank(完全背包,动态规划)
- hihoCoder #1043 : 完全背包(板子题)
- [hihocoder1043]完全背包
- tyvj p1015公路乘车-动态规划dp-完全背包
- HDU 1114 Piggy-Bank 动态规划完全背包
- POJ3181 动态规划 完全背包
- #1043 : 完全背包
- 0-1背包问题与完全背包问题C++实现 动态规划
- [算法]动态规划 0-1背包 完全背包