摘要:
View Code 1 #include<stdio.h> 2 #include<stdlib.h> 3 #include<string.h> 4 5 int c[10001],w[10001],f[10001]; 6 int main() 7 { 8 int i, j, n, v; 9 10 while(scanf("%d%d",&n,&v)&&n&&v)11 {12 memset(f,0,sizeof(f)); 13 for(i=0; i<n; i++)14 ... 阅读全文
摘要:
网上搜的: 对于动态规划,每个刚接触的人都需要一段时间来理解,特别是第一次接触的时候总是想不通为什么这种方法可行,这篇文章就是为了帮助大家理解动态规划,并通过讲解基本的01背包问题来引导读者如何去思考动态规划。本文力求通俗易懂,无异性,不让读者感到迷惑,引导读者去思考,所以如果你在阅读中发现有不通顺的地方,让你产生错误理解的地方,让你难得读懂的地方,请跟贴指出,谢谢!----第一节----初识动态规划-------- 经典的01背包问题是这样的: 有一个包和n个物品,包的容量为m,每个物品都有各自的体积和价值,问当从这n个物品中选择多个物品放在包里而物品体积总数不超过包的容量m时,能够得到的最 阅读全文
摘要:
看了两个多小时的01背包问题,这是做出来的第一道,Happy~!提议可以这样来理解,要求邮票的分值之差最小,就是邮票分成两堆即两个容器,而每张邮票只有选和不选两种状态,所以只要求出每个容器的最大装载量即可,这样就转化为01背包问题了。这和zb的生日那道题一样只要代码稍作休改就能过。score[j]代表的是容量为j的容器所能装载邮票的最大分值。得出递推关系式:score[j] = score[j] > score[j-a[i]]+a[i] ? score[j] : score[j-a[i]]+a[i];其中a[i]是第i个邮票的分值View Code 1 #include<stdio 阅读全文