http://codeforces.com/contest/543/problem/A

一开始这题用了多重背包做,结果有后效性。

就是如果6,这样拆分成

1 + 2 + 3的,那么能产生3的就有两种情况了(同一种物品,两种情况,所以有了后效性)

分别是1 + 2 = 3和0 + 3 = 3

以前的多重背包只需要输出那些最优解,所以这个后效性可以忽略,但是现在是输出方案种类,所以不能忽视。

一开始的时候还以为他只能写b / per_bug个,因为最多b个bug,每个程序员写per_bug个。那么就是b / per_bug行。

所以觉得是多重背包。但是不是,第一,这里没限制它写多少行,确实是最多b / per_bug行,但是如果多了几行,也就是超过了背包容量,这其实和无限使用时一个意思的。

多重背包的都是最多能用c个,而且用了c + 1 个的话,还是没超过背包容量的,这才是多重背包。。

那么这么想,任何一个programmer,都可以写0...m行。

因为它能写m行,而这个m已经是背包容量的最大值了。所以就相当于完全背包了。

如果再选多个容量就超过了背包容量,那不会叠加上来的。这是完全背包的思想吧

那么设dp[m][b]表示前i个程序员,一共写了m行,有b个bug的情况。

对于每个程序员,都可以写0...m行,dp[m][b] += dp[m - 1][b - cost];

从自己写的m - 1行递推上来,就相当于写了m行了。

#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <cmath>
#include <algorithm>
#include <assert.h>
#define IOS ios::sync_with_stdio(false)
using namespace std;
#define inf (0x3f3f3f3f)
typedef long long int LL; #include <iostream>
#include <sstream>
#include <vector>
#include <set>
#include <map>
#include <queue>
#include <string>
#include <conio.h>
const int maxn = + ;
struct node {
int hang;
int bug;
node(int hh, int bb) : hang(hh), bug(bb) {}
node() {}
}a[maxn];
int w[maxn];
int val[maxn];
int dp[maxn][maxn];
void work() {
int n, m, b, MOD;
scanf("%d%d%d%d", &n, &m, &b, &MOD);
for (int i = ; i <= n; ++i) {
scanf("%d", &w[i]);
}
dp[][] = ;
for (int i = ; i <= n; ++i) {
for (int j = ; j <= m; ++j) {
// if (j * w[i] > b) break;
for (int k = w[i]; k <= b; ++k) {
dp[j][k] += dp[j - ][k - w[i]];
if (dp[j][k] >= MOD) dp[j][k] %= MOD;
}
}
}
int ans = ;
for (int i = ; i <= b; ++i) {
ans += dp[m][i];
if (ans >= MOD) ans %= MOD;
}
printf("%d\n", ans);
} int main() {
#ifdef local
freopen("data.txt", "r", stdin);
// freopen("data.txt", "w", stdout);
#endif
work();
return ;
}

A. Writing Code 完全背包的更多相关文章

  1. 完全背包 Codeforces Round #302 (Div. 2) C Writing Code

    题目传送门 /* 题意:n个程序员,每个人每行写a[i]个bug,现在写m行,最多出现b个bug,问可能的方案有几个 完全背包:dp[i][j][k] 表示i个人,j行,k个bug dp[0][0][ ...

  2. (完全背包)Writing Code -- Codeforce 544C

    http://acm.hust.edu.cn/vjudge/contest/view.action?cid=99951#problem/C  (zznu14) Writing Code  Writin ...

  3. [CF543A]/[CF544C]Writing Code

    [CF543A]/[CF544C]Writing Code 题目大意: 有\(n\)种物品,每种物品分别要\(c_i\)的代价,每个物品有\(1\)的体积,每个物品可以选多个,代价不能超过\(b\), ...

  4. Codeforces Round #302 (Div. 2).C. Writing Code (dp)

    C. Writing Code time limit per test 3 seconds memory limit per test 256 megabytes input standard inp ...

  5. Codeforces Round #302 (Div. 2) C. Writing Code 简单dp

    C. Writing Code Time Limit: 20 Sec  Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/544/prob ...

  6. CodeForces 543A - Writing Code DP 完全背包

    有n个程序,这n个程序运作产生m行代码,但是每个程序产生的BUG总和不能超过b, 给出每个程序产生的代码,每行会产生ai个BUG,问在总BUG不超过b的情况下, 我们有几种选择方法思路:看懂了题意之后 ...

  7. CodeForces 544C (Writing Code)(dp,完全背包)

    题意:有n个程序员,要协作写完m行代码,最多出现b个bug,第i个程序员每写一行代码就会产生a[i]个bug,现在问,这n个人合作来写完这m行代码,有几种方案使得出的bug总数不超过b(题中要求总方案 ...

  8. 背包DP || Codeforces 544C Writing Code

    程序员写bug的故事23333 题意:n个程序员,一共写m行程序,最多产生b个bug,问方案数 思路:f[i][j]表示写了i行,产生了j个bug的方案数,因为每个人都是可以独立的,所以i循环到n都做 ...

  9. CF543A Writing Code

    题目描述 Programmers working on a large project have just received a task to write exactly m m m lines o ...

随机推荐

  1. XData -–无需开发、基于配置的数据库RESTful服务,可作为移动App和ExtJS、WPF/Silverlight、Ajax等应用的服务端

    XData -–无需开发.基于配置的数据库RESTful服务,可作为移动App和ExtJS.WPF/Silverlight.Ajax等应用的服务端   源起一个App项目,Web服务器就一台,已经装了 ...

  2. Hibernate之即时更新

    昨天工作中遇到了一个简单的问题,弄了好久,都怪自己没有好好的去了解hibernate,导致了这样的问题弄了两三个小时. 问题是这样的:我想即时更改数据,然后再查询 (1)用Spring的getHibe ...

  3. FTP地址格式如下:“ftp://用户名:密码@FTP服务器IP”

    FTP地址格式如下:“ftp://用户名:密码@FTP服务器IP”

  4. Java值传递以及引用的传递、数组的传递!!

    转(http://blog.csdn.net/niuniu20008/article/details/2953785) 许多编程语言都有2种方法将参数传递给方法------按值传递和按引用传递. 与其 ...

  5. PHP5.6.15连接Sql Server 2008配置方案

    php5.6的如果想连接Sql Server 2008数据库,需要手动配置扩展和安装一个驱动. 下载SQL Server Driver for PHP的扩展包,64位系统的官方不支持,找到一个非官方的 ...

  6. js拖动层原形版

    脚本文件: function JzDrag(moveDivId, moveDivHandle) { // var me = this; this.M = false; //是否在移动对象 this.D ...

  7. linux中的进程和线程

    应用程序:可以被操作系统执行的一组指令和参数的集合,是静态的,并存储在磁盘空间中: 进程:在操作系统中在运行程序后,处于运行状态的程序,是应用程序的一个执行过程,同时也是操作系统分配内存,cpu等系统 ...

  8. Spark Streaming源码解读之数据清理内幕彻底解密

    本期内容 : Spark Streaming数据清理原理和现象 Spark Streaming数据清理代码解析 Spark Streaming一直在运行的,在计算的过程中会不断的产生RDD ,如每秒钟 ...

  9. 基于 EntityFramework 的数据库主从读写分离

    现在刚开始来研究EntityFramwork,起初是在vs2012中通过工具来创建EF ,但是对我这种不熟悉菜鸟来说 有很多业务用EF做出来还是有点难度的,今天来手动搭建一个EF框架,大神勿喷

  10. Replace Pioneer 注册

    批量文本替换工具,Replace Pioneer 注册:http://www.mind-pioneer.com