今天终于打起勇气来看DD的《背包九讲》,一开始挺生涩的,不过多问问为什么,不懂的多在纸上模拟一下过程,和同学交流一下,就懂了,下面是Tyvj上的一道动态规划的初学者题目——采药:http://www.tyvj.cn/Problem_Show.aspx?id=1005
其实就是最基础的01背包问题啦,题目就不贴出来了,只贴代码,代码原理也不用解释了,很简单的理论,不过想要记录一下自己现在编程的模板,就是这几个简简单单的#define,是参考大神们,然后结合自己平时编程的需求和习惯,这样子自定义编程的感觉好舒服!!!越来越觉得code是一种享受了,哈哈,加油,早点睡!明天才有精神学习!fighting!
#include <stdio.h> #include <string.h> #define LL unsigned long long #define loop(i, beg, end) for(int i=beg; i<end; ++i) #define max(a,b) a>b?a:b int f[1001]; int main() { int T, m; scanf("%d%d",&T,&m); int* t = new int[m]; int* money = new int[m]; loop(i,0,m) scanf("%d%d",&t[i],&money[i]); loop(i,0,m) { for(int j=T; j>=t[i]; --j) f[j] = max(f[j],f[j-t[i]]+money[i]); } int ans = f[0]; loop(i,1,T+1) ans = max(ans,f[i]); printf("%d\n",ans) ; return 0; }