bzoj2287【POJ Challenge】消失之物 缺一01背包
bzoj2287【POJ Challenge】消失之物 缺一01背包
链接
思路
分治solve(l,r,arr)表示缺少物品\([l,r]\)的dp数组arr。
然后solve(l,mid,arr)用右边的物品更新,solve(mid+1,r,arr)同理。
\(f(n)=2*f(\frac{n}{2})+(r-l+1)*m\)
复杂度为\(O(nmlog{n})\)
缺点最短路也是这样,用\(floyd\)
代码
#include <bits/stdc++.h>
using namespace std;
const int _=2e3+7;
int n,m,w[_],tmp[_<<2][_],ans[_],cnt;
void solve(int l,int r,int *f) {
    if(l==r) {
        for(int i=1;i<=m;++i) printf("%d",f[i]);puts("");
        return;
    }
    int mid=(l+r)>>1,p=++cnt;
    for(int i=0;i<=m;++i) tmp[p][i]=f[i];
    for(int i=mid+1;i<=r;++i)
        for(int j=m;j>=w[i];--j)
            f[j]+=f[j-w[i]],f[j]%=10;
    solve(l,mid,f);
    for(int i=0;i<=m;++i) f[i]=tmp[p][i];
    for(int i=l;i<=mid;++i)
        for(int j=m;j>=w[i];--j)
            f[j]+=f[j-w[i]],f[j]%=10;
    solve(mid+1,r,f);
}
int main() {
    scanf("%d%d",&n,&m);
    for(int i=1;i<=n;++i) scanf("%d",&w[i]);
    tmp[0][0]=1,solve(1,n,tmp[0]);
    return 0;
}
bzoj2287【POJ Challenge】消失之物 缺一01背包的更多相关文章
- [bzoj2287][poj Challenge]消失之物_背包dp_容斥原理
		消失之物 bzoj-2287 Poj Challenge 题目大意:给定$n$个物品,第$i$个物品的权值为$W_i$.记$Count(x,i)$为第$i$个物品不允许使用的情况下拿到重量为$x$的方 ... 
- bzoj2287 [POJ Challenge]消失之物
		题目链接 少打个else 调半天QAQ 重点在47行,比较妙 #include<algorithm> #include<iostream> #include<cstdli ... 
- bzoj2287:[POJ Challenge]消失之物
		思路:首先先背包预处理出f[x]表示所有物品背出体积为x的方案数.然后统计答案,利用dp. C[i][j]表示不用物品i,组成体积j的方案数. 转移公式:C[i][j]=f[j]-C[i][j-w[i ... 
- 【bzoj2287】[POJ Challenge]消失之物  背包dp
		题目描述 ftiasch 有 N 个物品, 体积分别是 W1, W2, ..., WN. 由于她的疏忽, 第 i 个物品丢失了. “要使用剩下的 N - 1 物品装满容积为 x 的背包,有几种方法呢? ... 
- POJ Challenge消失之物
		Description ftiasch 有 N 个物品, 体积分别是 W1, W2, ..., WN. 由于她的疏忽, 第 i 个物品丢失了. "要使用剩下的 N - 1 物品装满容积为 x ... 
- BZOJ.2287.[POJ Challenge]消失之物(退背包)
		BZOJ 洛谷 退背包.和原DP的递推一样,再减去一次递推就行了. f[i][j] = f[i-1][j-w[i]] + f[i-1][j] f[i-1][j] = f[i][j] - f[i-1][ ... 
- 【bozj2287】【[POJ Challenge]消失之物】维护多值递推
		(上不了p站我要死了) Description ftiasch 有 N 个物品, 体积分别是 W1, W2, -, WN. 由于她的疏忽, 第 i 个物品丢失了. "要使用剩下的 N - 1 ... 
- POJ 1112 Team Them Up! 二分图判定+01背包
		题目链接: http://poj.org/problem?id=1112 Team Them Up! Time Limit: 1000MSMemory Limit: 10000K 问题描述 Your ... 
- POJ  2923 Relocation(状压DP+01背包)题解
		题意:给你汽车容积c1,c2,再给你n个包裹的体积,问你最少运几次能全运走 思路:用2进制表示每次运送时某物在不在此次运送之中,1在0不在.我们把运送次数抽象成物品价值,把状态抽象成体积,用一个dp[ ... 
随机推荐
- centos7上配置mysql8的双主互写
			注意:1.主库1:10.1.131.75,主库2:10.1.131.762.server-id必须是纯数字,并且主从两个server-id在局域网内要唯一. [主节点1]vi /etc/my.cnf[ ... 
- ng的动画过渡
			动画过渡两种方法 1.使用angular+animation实现 在app-module.ts中引入 BrowserAnimationsModule 1.import { BrowserAnimati ... 
- UWP 使用Launcher 启动迅雷
			不得不说UWP有些地方真的不方便! 另外也要夸一下迅雷,还是蛮不错的! 代码 await Launcher.LaunchUriAsync(new Uri("magnet:?xt") ... 
- HTML--元素居中各种处理方法
			1.水平居中 对于行内元素可以使用: .center-children { text-align: center; } 对于块元素,你可以设置其左右外边距为:auto;同时你还应该设置该元素的宽度,不 ... 
- 【mybatis】mybatis一条sql更新两张数据表,mybatis关联更新多张数据表
			示例sql: <update id="receipt" parameterType="com.pisen.cloud.luna.ms.security.code.b ... 
- 使用RunTime.getRunTime().addShutdownHook优雅关闭线程池
			有时候我们用到的程序不一定总是在JVM里面驻守,可能调用完就不用了,释放资源. RunTime.getRunTime().addShutdownHook的作用就是在JVM销毁前执行的一个线程.当然这个 ... 
- VUE面刷新
			1.这种方法页面会一瞬间的白屏 ) 2.这种也是一样,画面一闪 location.reload() 3.搭配provide.inject使用 首先在主页面 app.vue 设置: <keep-a ... 
- Delphi - 利用TRzTrayIcon实现WinFrm工程最小化到托盘
			第三方RC控件的安装 浏览器搜索Delphi Rz控件下载,找到下载一个安装文件,解压后点击RC3.exe一键安装. Delphi WinFrm工程最小化到托盘 Delphi新建WinFrm工程,在主 ... 
- vue知识点小结
			vue.js中==和===的区别 1.== 用于比较.判断两者相等,比较时可自动换数据类型 2.=== 用于(严格)比较.判断两者(严格)相等,不会进行自动转换,要求进行比较的操作数必须类型一致,不一 ... 
- SpringIOC源码解析(下)
			注意,看完这篇文章需要很长很长很长时间... 本篇文章是SpringIOC源码解析(上)的续集,上一篇文章介绍了使用XML的方式启动Spring,然后追踪了BeanFactory容器的创建.配置文件的 ... 
