01背包变形,注意dp过程的时候就需要取膜,否则会出错。

  代码如下:

  1. #include<iostream>
  2. #include<cstdio>
  3. #include<cstring>
  4. using namespace std;
  5. #define MAXW 15005
  6. #define N 155
  7. #define LL long long
  8. #define MOD 1000000007
  9. int w1[N],w2[N];
  10. LL dp1[MAXW],dp2[MAXW];
  11. int main()
  12. {
  13. // freopen("A.in.cpp","r",stdin);
  14. int t,n,m,k,W,s,e;
  15. int sum1,sum2;
  16. LL ans;
  17. cin>>t;
  18. while(t--)
  19. {
  20. cin>>n>>m>>k>>W;
  21. sum1 = sum2 = ;
  22. for(int i = ; i < n; i++)
  23. {
  24. cin>>w1[i];
  25. sum1 += w1[i];
  26. }
  27. for(int i = ; i < m; i++)
  28. {
  29. cin>>w2[i];
  30. sum2 += w2[i];
  31. }
  32. memset(dp1,,sizeof(dp1));
  33. memset(dp2,,sizeof(dp2));
  34. dp1[] = dp2[] = ;
  35. for(int i = ; i < n; i++)
  36. {
  37. for(int j = sum1; j >= w1[i]; j--)
  38. {
  39. dp1[j] = (dp1[j]%MOD + dp1[j-w1[i]]%MOD)%MOD;///没有mod就wa
  40. }
  41. }
  42. for(int i = ; i < m; i++)
  43. {
  44. for(int j = sum2; j >= w2[i]; j--)
  45. {
  46. dp2[j] = (dp2[j]%MOD + dp2[j-w2[i]]%MOD)%MOD;
  47. }
  48. }
  49. if((W-k)% != ) s = (W-k)/+;
  50. else s = (W-k)/;
  51. e = W-s;
  52. ans = ;
  53. for(int i = s; i <= e; i++)
  54. {
  55. ans = (((dp1[i]%MOD)*(dp2[W-i]%MOD))%MOD + ans%MOD) % MOD;
  56. }
  57. cout<<ans<<endl;
  58. }
  59. return ;
  60. }

codeforce Gym 101102A Coins (01背包变形)的更多相关文章

  1. FZU 2214 Knapsack problem 01背包变形

    题目链接:Knapsack problem 大意:给出T组测试数据,每组给出n个物品和最大容量w.然后依次给出n个物品的价值和体积. 问,最多能盛的物品价值和是多少? 思路:01背包变形,因为w太大, ...

  2. HDU 2639 Bone Collector II(01背包变形【第K大最优解】)

    Bone Collector II Time Limit: 5000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others ...

  3. 【01背包变形】Robberies HDU 2955

    http://acm.hdu.edu.cn/showproblem.php?pid=2955 [题意] 有一个强盗要去几个银行偷盗,他既想多抢点钱,又想尽量不被抓到.已知各个银行 的金钱数和被抓的概率 ...

  4. CF#214 C. Dima and Salad 01背包变形

    C. Dima and Salad 题意 有n种水果,第i个水果有一个美味度ai和能量值bi,现在要选择部分水果做沙拉,假如此时选择了m个水果,要保证\(\frac{\sum_{i=1}^ma_i}{ ...

  5. Gym 101102A Coins -- 2016 ACM Amman Collegiate Programming Contest(01背包变形)

    A - Coins Time Limit:3000MS     Memory Limit:262144KB     64bit IO Format:%I64d & %I64u Descript ...

  6. Codeforces 2016 ACM Amman Collegiate Programming Contest A. Coins(动态规划/01背包变形)

    传送门 Description Hasan and Bahosain want to buy a new video game, they want to share the expenses. Ha ...

  7. UVA 562 Dividing coins --01背包的变形

    01背包的变形. 先算出硬币面值的总和,然后此题变成求背包容量为V=sum/2时,能装的最多的硬币,然后将剩余的面值和它相减取一个绝对值就是最小的差值. 代码: #include <iostre ...

  8. Codeforces Gym - 101102A - Coins

    A. Coins 题目链接:http://codeforces.com/gym/101102/problem/A time limit per test 3 seconds memory limit ...

  9. POJ 3211 Washing Cloths(01背包变形)

    Q: 01背包最后返回什么 dp[v], v 是多少? A: 普通01背包需要遍历, 从大到小. 但此题因为物品的总重量必定大于背包容量, 所以直接返回 dp[V] 即可 update 2014年3月 ...

随机推荐

  1. List<T>集合导出csv方法参考,通过增加自定义的属性控制输出的字段。

    public string CreateAdvExcel(List<GridScoreManager> lt) { StringBuilder builder = new StringBu ...

  2. python 学习 [day6]

    递归阶乘: 函数自己调用自己循环操作的模式称之为递归 def func(num): if num == 1: return 1 return num * func(num - 1) print(fun ...

  3. 在Table的Tbody中实现滚动条滚动

    功能描述: 在一个Table中实现表头固定不动,内容部分实现通过滚动条滚动. 实现效果: 当页面宽度变宽时,只有最后一列的宽度会改变. 逻辑实现: 1.将表头和内容分别使用两个table标签包裹,每一 ...

  4. mysql count max min 语句用法

    count 用法 求总条数 $sql="select count(*) as total from e_user"; $query = mysql_query($sql, $lin ...

  5. C1FlexGrid小结(转自http://www.cnblogs.com/C1SupportTeam/archive/2012/12/11/2812316.html)

    C1FlexGrid控件来对一个表格格式中的数据进行显示,编辑,组和总结.该表格可以绑定到一个数据源,它可以对自己的数据进行管理. C1FlexGrid控件有一个包含以下元素的丰富的对象模型: 以下的 ...

  6. VPS服务器利用WINSCP软件进行SFTP管理服务器文件

    虽然我使用VPS时间也不是很久,但是我善于进行统计和分析,从我在的一些VPS交流QQ群中,可以看到基本上使用搬瓦工VPS的站长群中新手较多,甚至很多人都搞不明白VPS与V-P-N的区别都直接选择VPS ...

  7. hdu 3631 Shortest Path

    floyd算法好像很奇妙的样子.可以做到每次加入一个点再以这个点为中间点去更新最短路,效率是n*n. #include<cstdio> #include<cstring> #i ...

  8. 设置 SSH 免密码登陆——仍提示输入密码

    1)生成密钥:在根目录下(cd  ~/   用户根目录)执行如下语句: ssh-keygen -t dsa -P ' ' -f ~/.ssh/id_dsa 以上是两个单引号. 2)将id_dsa.pu ...

  9. discuz使用总结

    使用xampp作为运行环境 xampp的初始目录. xampp中mysql root账户的密码是空

  10. sql 多个字段排序,头一个字段排序完,再对第二个字段进行排序(以此类推)

    现根据num排序,num数字相同的根据时间进行排序,都是降序DESC SELECT * FROM counts ORDER BY num DESC,create_time DESC