Description

ftiasch 有 N 个物品, 体积分别是 W1W2, ..., WN。 由于她的疏忽, 第 i 个物品丢失了。 “要使用剩下的 N - 1 物品装满容积为 x 的背包,有几种方法呢?” -- 这是经典的问题了。她把答案记为 Count(i, x) ,想要得到所有1 <= i <= N, 1 <= x <= M的 Count(i, x) 表格。

Input

第1行:两个整数 N (1 ≤ N ≤ 2 × 103) 和 M (1 ≤ M ≤ 2 × 103),物品的数量和最大的容积。

第2行: N 个整数 W1W2, ..., WN, 物品的体积。

Output

一个 N × M 的矩阵, Count(i, x)的末位数字。

Sample Input

3 2
1 1 2

Sample Output

11
11
21

HINT

解析:首先我们先不要考虑是否会有一个物品消失,直接先用f数组来表示到第i个物品时,能达到j的重量的方案有多少,然后用一个c数组来表示所有物品中,除去第i个物品,能达到j的重量的方案有多少,c[i][j]=f[n][j]-c[i][j-a[i]](c[i][j-a[i]]指除去第i个物品中能达到j-a[i]重量的方案数即其他物品加上a[i](即算上第i个物品)后能达到j的重量的方案数,减去后,剩下的就是,不用第i个物品达到j的方案数);(a[i]表示当前物品的重量)具体步骤看程序。

ps:因为题目要求输出个位数,所以过程中必须取余10,但是在后面个位数减去个位数会造成负数的情况,所以在一些地方需要+10后再运算。

#include<iostream>
#include<cstdio>
using namespace std;
long long f[2005][2005],w[3000],b[2005][2005],x,n,m;
int main()
{cin>>n>>m;for (int i=1;i<=n;i++) cin>>w[i];for (int i=0;i<=n;i++)for (int j=0;j<=m;j++)f[i][j]=0,b[i][j];f[0][0]=1;//刚开始前0个物品达到0的重量的方案数为一for (int i=1;i<=n;i++)for (int j=0;j<=m;j++)if (j-w[i]>=0) f[i][j]+=(f[i-1][j-w[i]]+f[i-1][j])%10;//取或不取的方案数都加上else f[i][j]+=f[i-1][j]%10;for (int i=1;i<=n;i++)for (int j=0;j<=m;j++)if (j-w[i]>=0) b[i][j]=(f[n][j]-b[i][j-w[i]]+10)%10;//不取第i个物品的达到j的重量的方案数由此得出,加10是为了避免个位与个位相减时出现负数。else b[i][j]=f[n][j]%10;for (int i=1;i<=n;i++)for (int j=1;j<=m;j++)if (j!=m) cout<<b[i][j];else cout<<b[i][j]<<endl;//输出return 0;
}

好啦

转载于:https://www.cnblogs.com/2014nhc/p/6221332.html

2287: 【POJ Challenge】消失之物相关推荐

  1. BZOJ 2287 POJ Challenge 消失之物

    BZOJ题目不完整,看了看题解.发现他们都要取模10,还以为是dp的限制. 改了两小时,之后猛然发现.卧槽原本我少了一个取模. 写法1:暴力写法 最简单的想法(只要你会背包dp) 我在枚举每次不选哪个 ...

  2. BZOJ 2287 【POJ Challenge】消失之物

    2287: [POJ Challenge]消失之物 Description ftiasch 有 N 个物品, 体积分别是 W1, W2, ..., WN. 由于她的疏忽, 第 i 个物品丢失了. &q ...

  3. 2287. 【POJ Challenge】消失之物(数组递推\分治优化背包)

    2287. [POJ Challenge]消失之物 这题的思想和P4564 [CTSC2018]假面优化的思想一样,应该反过来说,假面那个题应该是借鉴这题的思路. 显然不能枚举每个物品消失O(n)O( ...

  4. bzoj2287【POJ Challenge】消失之物 缺一01背包

    bzoj2287[POJ Challenge]消失之物 缺一01背包 链接 bzoj 思路 分治solve(l,r,arr)表示缺少物品\([l,r]\)的dp数组arr. 然后solve(l,mid ...

  5. bzoj2295【POJ Challenge】我爱你啊*

    bzoj2295[POJ Challenge]我爱你啊 题意: 求一个字符串中有多少个"luvletter"(不包括引号).字符串长度≤100000. 题解: 连kmp都不用-- ...

  6. bzoj 2296: 【POJ Challenge】随机种子

    Time Limit: 1 Sec  Memory Limit: 128 MBSec  Special JudgeDescription 1tthinking除了随机算法,其他什么都不会.但是他还是可 ...

  7. 【BZOJ】2289: 【POJ Challenge】圆,圆,圆

    题解 二分一个横坐标,过这个横坐标做一条和y轴平行的直线,相当于在这条直线上做区间覆盖,如果区间有交的话,那么答案是True 否则的话取两个不相交的区间,如果这两个圆相离或相切则不合法 否则看看相交的 ...

  8. BZOJ 2288: 【POJ Challenge】生日礼物 优先队列+贪心+链表

    这题看别人题解的 这题说可以转换成数据备份. 这题可以把一段同号的数并成一个数,那么就变成了一个正负交替的序列,然后把头尾的负数去掉. 然后就是把所有的正值都加起来,并统计正数的段数cnt,如cnt& ...

  9. 【POJ Challenge】生日礼物 加强m子段和

    还是链表跟二叉堆的双映射 //#include<bits/stdc++.h> //#pragma comment(linker, "/STACK:1024000000,10240 ...

最新文章

  1. Matlab实现 sift 特征匹配(代码源自网络)
  2. C语言会出现的错误,c语言,能运行但是偶尔会出现些错误,请高手们帮忙看看错在哪里啦...
  3. 如何利用神经网络结合遗传算法进行非线性函数极值寻优(2)
  4. 商务部强势回应 欧盟裁定高额税率方法不合理
  5. SqlServer2005数据库分区
  6. CentOS 7.X 安装 Gitlab 笔记
  7. node.js实现formdata上传文件
  8. java setter_java – 如何获得@getter和@setter?
  9. netty系列之:基于流的数据传输
  10. 基于云平台的家居综合监测管理系统的设计与实现
  11. [剑指offer]面试题第[60]题[JAVA][n个骰子的点数][动态规划][空间优化]
  12. Java程序员必知的10个调试技巧
  13. Vue组件间常用的通信方式总结
  14. 清北学堂2018年1月省选强化班模拟考试1
  15. 如何在mysql navicat 设置datetime类型的默认事件值
  16. 怎么将多张图片合成一个pdf文件
  17. 分享大学生关于创新创业的想法,包括外卖私人订制化,网购衣服3D化远程试衣,睡眠耳机开发等等创新创业想法。
  18. Apifox测试Excel文件上传
  19. 【Python机器学习及实践】实战篇:泰坦尼克号罹难乘客预测
  20. 阿里云国际版查看云服务器ecs实例系统日志和截图-Unirech

热门文章

  1. Linux动态链接库隔离,Linux下的.so文件是动态链接库
  2. 四年级学生计算机学情分析报告,四年级学情分析
  3. 前端传json对象后台接收
  4. Nginx配置同时访问http和https
  5. 【服务器】Discuz论坛实现微信小程序(修改接口)
  6. mongodb和mysql空间占用_MongoDB的存储结构及对空间使用率的影响
  7. iview select 内存泄漏_Vue遇到的内存泄漏排查处理
  8. 第二章 HTML5存储 Web存储
  9. JavaScript的for of语法遍历数组元素
  10. C#基础8:类的继承