hdu1864 01背包

题目链接

题目大意:一堆数,找到一个最大的和满足这个和不超过Q
要学会分析复杂度!

  1. #include <cstdio>
  2. #include <cstring>
  3. #define MAX(a,b) (a>b?a:b)
  4. const int N = ;
  5. int dp[N],data[N];
  6. float bound;
  7. int n,cnt;
  8. int main(){
  9. char type;
  10. float price[],tprice;
  11. while(scanf("%f%d",&bound,&n)&&n){
  12. int totalCnt = ;
  13. for(int i=;i<n;i++){
  14. scanf("%d",&cnt);
  15. bool flag = true;
  16. price[]=price[]=price[]=0.0f;
  17. for(int j=;j<cnt;j++){
  18. getchar();
  19. scanf("%c:%f",&type,&tprice);
  20. if((type!='A')&&(type!='B')&&(type!='C')) flag = false;
  21. else price[type-'A'] += tprice;
  22. }
  23. if(!flag) continue;
  24. if(price[]>||price[]>||price[]>) continue;
  25. float totalPrice = price[]+price[]+price[];
  26. if(totalPrice>) continue;
  27. data[totalCnt++] = (totalPrice*);
  28. }
  29. memset(dp,,sizeof(dp));
  30. bound*=;
  31. for(int i=;i<totalCnt;i++)
  32. for(int v=bound;v>=data[i];v--)
  33. dp[v] = MAX(dp[v],dp[v-data[i]]+data[i]);
  34. printf("%.2f\n",dp[bound]/);
  35. }
  36. return ;
  37. }

hdu2844 多重背包模板题

题目链接

题目大意:两个数组A,C。表示有Ci个Ai,问1-m中有多少个数能由这堆数相加表示。

  1. #include <set>
  2. #include <map>
  3. #include <stack>
  4. #include <queue>
  5. #include <cmath>
  6. #include <vector>
  7. #include <string>
  8. #include <cstdio>
  9. #include <cstring>
  10. #include <cstdlib>
  11. #include <iostream>
  12. #include <algorithm>
  13.  
  14. #define MAX(a,b) ((a)>=(b)?(a):(b))
  15. #define MIN(a,b) ((a)<=(b)?(a):(b))
  16. #define OO 0x0fffffff
  17. using namespace std;
  18. const int N = ;
  19. int f[N],A[],C[];
  20. int main(){
  21. int n,m;
  22. int tcnt,tcv;
  23. while(scanf("%d%d",&n,&m),m+n){
  24. memset(f,,sizeof(f));
  25. for(int i=;i<n;i++) cin>>A[i];
  26. for(int i=;i<n;i++) cin>>C[i];
  27. for(int i=;i<n;i++){
  28. tcnt = ;
  29. while(C[i]){
  30. tcv=tcnt*A[i];
  31. for(int v=m;v>=tcv;v--)
  32. f[v] = MAX(f[v],f[v-tcv]+tcv);
  33. C[i]-=tcnt;
  34. if((tcnt<<)<=C[i]) tcnt<<=;
  35. else tcnt=C[i];
  36. }
  37. }
  38. int ans = ;
  39. for(int i=;i<=m;i++) if(f[i]==i) ans++;
  40. printf("%d\n",ans);
  41. }
  42. return ;
  43. }

hdu2159  完全背包

题目链接

最近xhd正在玩一款叫做FATE的游戏,为了得到极品装备,xhd在不停的杀怪做任务。久而久之xhd开始对杀怪产生的厌恶感,但又不得不通过杀怪来升完这最后一级。现在的问题是,xhd升掉最后一级还需n的经验值,xhd还留有m的忍耐度,每杀一个怪xhd会得到相应的经验,并减掉相应的忍耐度。当忍耐度降到0或者0以下时,xhd就不会玩这游戏。xhd还说了他最多只杀s只怪。请问他能升掉这最后一级吗?

/********************************************************/

二维费用的完全背包

  1. #include <set>
  2. #include <map>
  3. #include <stack>
  4. #include <queue>
  5. #include <cmath>
  6. #include <vector>
  7. #include <string>
  8. #include <cstdio>
  9. #include <cstring>
  10. #include <cstdlib>
  11. #include <iostream>
  12. #include <algorithm>
  13.  
  14. #define MAX(a,b) ((a)>=(b)?(a):(b))
  15. #define MIN(a,b) ((a)<=(b)?(a):(b))
  16. #define OO 0x0fffffff
  17. using namespace std;
  18. const int N = ;
  19. int f[N][N],value[N],cost[N];
  20. int main(){
  21. int n,m,k,s;
  22. while(scanf("%d%d%d%d",&n,&m,&k,&s)!=EOF){
  23. for(int i=;i<k;i++) scanf("%d%d",value+i,cost+i);
  24. memset(f,,sizeof(f));
  25. for(int i=;i<k;i++) for(int x=cost[i];x<=m;x++)
  26. for(int y=;y<=s;y++){
  27. f[x][y] = MAX(f[x][y],f[x-cost[i]][y-]+value[i]);
  28. }
  29. if(f[m][s]<n){
  30. puts("-1");
  31. continue;
  32. }
  33. for(int x=;x<=m;x++){
  34. if(f[x][s]>=n){
  35. printf("%d\n",m-x);
  36. break;
  37. }
  38. }
  39. }
  40. return ;
  41. }

hdu1864/2844/2159 背包基础题的更多相关文章

  1. Jam's balance HDU - 5616 (01背包基础题)

    Jim has a balance and N weights. (1≤N≤20) The balance can only tell whether things on different side ...

  2. hdu 2191 珍惜现在,感恩生活 多重背包入门题

    背包九讲下载CSDN 背包九讲内容 多重背包: hdu 2191 珍惜现在,感恩生活 多重背包入门题 使用将多重背包转化为完全背包与01背包求解: 对于w*num>= V这时就是完全背包,完全背 ...

  3. HDU 1284 钱币兑换问题(全然背包:入门题)

    HDU 1284 钱币兑换问题(全然背包:入门题) http://acm.hdu.edu.cn/showproblem.php?pid=1284 题意: 在一个国家仅有1分,2分.3分硬币,将钱N ( ...

  4. Android测试基础题(三)

    今天接着给大家带来的是Android测试基础题(三).    需求:定义一个排序的方法,根据用户传入的double类型数组进行排序,并返回排序后的数组 俗话说的好:温故而知新,可以为师矣 packag ...

  5. 小试牛刀3之JavaScript基础题

    JavaScript基础题 1.让用户输入两个数字,然后输出相加的结果. *prompt() 方法用于显示可提示用户进行输入的对话框. 语法: prompt(text,defaultText) 说明: ...

  6. 小试牛刀2:JavaScript基础题

    JavaScript基础题 1.网页中有个字符串“我有一个梦想”,使用JavaScript获取该字符串的长度,同时输出字符串最后两个字. 答案: <!DOCTYPE html PUBLIC &q ...

  7. HDU 1712 ACboy needs your help (分组背包模版题)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1712 有n门课,和m天时间.每门课上不同的天数有不同的价值,但是上过这门课后不能再上了,求m天里的最大 ...

  8. HDU 1301 Jungle Roads (最小生成树,基础题,模版解释)——同 poj 1251 Jungle Roads

    双向边,基础题,最小生成树   题目 同题目     #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include<stri ...

  9. nyist oj 79 拦截导弹 (动态规划基础题)

    拦截导弹 时间限制:3000 ms  |  内存限制:65535 KB 难度:3 描写叙述 某国为了防御敌国的导弹突击.发展中一种导弹拦截系统.可是这样的导弹拦截系统有一个缺陷:尽管它的第一发炮弹可以 ...

随机推荐

  1. Android-Volley网络通信框架(自己定义Request 请求:实现 GsonRequest)

    1.回想 上篇学习了android 通过 volley 网络通信框架 实现 请求图片的三种方法! 2.重点 (1)复习和熟悉 StringRequest ,JsonObjectRequest 方法 ( ...

  2. UI组件之TextView及其子类(一)TextView和EditText

    先来整理一下TexView,EditView的使用方法. Textview是最主要的组件.直接继承了View,也是众多组件的父类.所以了解她的属性会对学习其它组件非常有帮助. TextView的属性: ...

  3. 如何从 Datagrid 中获得单元格的内容与 使用值转换器进行绑定数据的转换IValueConverter

    一.如何从 Datagrid 中获得单元格的内容 DataGrid 属于一种 ItemsControl, 因此,它有 Items 属性并且用ItemContainer 封装它的 items. 但是,W ...

  4. event内存泄漏

    C#内存泄漏--event内存泄漏 内存泄漏是指:当一块内存被分配后,被丢弃,没有任何实例指针指向这块内存, 并且这块内存不会被GC视为垃圾进行回收.这块内存会一直存在,直到程序退出.C#是托管型代码 ...

  5. [codeforces 894 E] Ralph and Mushrooms 解题报告 (SCC+拓扑排序+DP)

    题目链接:http://codeforces.com/problemset/problem/894/E 题目大意: $n$个点$m$条边的有向图,每条边有一个权值,可以重复走. 第$i$次走过某条边权 ...

  6. .net中MVC Webapi多参数调用控制器方法

    http://blog.csdn.net/wulex/article/details/71545471 路由 public static void Register(HttpConfiguration ...

  7. 51nod 1435 位数阶乘 (手动计算)

    题目: 1435 位数阶乘 题目来源: CodeForces 基准时间限制:1 秒 空间限制:131072 KB 分值: 40 难度:4级算法题 X是一个n位数的正整数 (x=a0a1...an−1) ...

  8. 【模板】扩展中国剩余定理(EXCRT)

    扩展中国剩余定理,是求解形如:$x\equiv a_{1}($ mod $b_{1})$$x\equiv a_{2}($ mod $b_{2})$$x\equiv a_{3}($ mod $b_{3} ...

  9. NOIp2018模拟赛三十七

    奇怪的一场... 前两题都是全场题,C题明显不可做,我题目都没看懂...(STO lhx OTZ) 成绩:100+100+8=208 貌似十几个208的...A题暴力$O(nmc)$能过...暴力容斥 ...

  10. 【BZOJ4002】[JLOI2015]有意义的字符串 - 矩阵乘法

    题意: 给出b,d,n,求$\lfloor(\frac{b+\sqrt{d}}{2})^n\rfloor \mod 999999999999999989$(原题是7528443412579576937 ...