虽然说这题多重背包很明显,但是没有花一点时间是过不了的,TLE 了n次啊,一开始直接用 多重背包 做法直接上,结果T了,后来也看了一些别人的做法,真的是需要思考啊。。
因为这题是判断最后 是否 符合条件,因此没必要 记录 最优结果,因此只要 利用 bool (int就 TLE,各种yy)记录是否 满足条件就可以了。
在 01 背包中,dp[i]=dp[i]|dp[i-cost],表示i的状态要么由 本身 或者 i-cost 推过来,本来是 dp[i]=max(dp[i],dp[i-cost]+weight),但是这边没必要了。。
#include<iostream>
#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
const int maxV=100005;
const int maxn=105;
int c[maxn],w[maxn];
int n,V;
bool dp[maxV];
void ZeroOnePack(int cost){
for(int i=V;i>=cost;i--)dp[i]|=dp[i-cost];
}
void CompletePack(int cost){
for(int i=cost;i<=V;i++)dp[i]|=dp[i-cost];
}
void MultiplePack(int cost,int amount){
if(cost*amount>=V)CompletePack(cost);
else {
int k=1;
while(k<amount){
ZeroOnePack(k*cost);
amount-=k;
k<<=1;
}
ZeroOnePack(amount*cost);
}
}
int main(){
while(scanf("%d%d",&n,&V)&&(n||V)){
for(int i=1;i<=n;i++)scanf("%d",w+i);
for(int i=1;i<=n;i++)scanf("%d",c+i);
//memset(dp,0,sizeof(dp));
for(int i=0;i<=V;i++)dp[i]=0;
dp[0]=1;
for(int i=1;i<=n;i++){
if(c[i])MultiplePack(w[i],c[i]);
}
int ans=0;
for(int i=1;i<=V;i++)if(dp[i])ans++;
printf("%d\n",ans);
}
return 0;
}
更多详细信息请查看
java教程网 http://www.itchm.com/forum-59-1.html
分享到:
相关推荐
在给出的文件列表中,“POJ1014-Dividing【多重背包+二进制优化】.cpp”和“POJ1014-Dividing【DFS】.cpp”很可能是两份不同的C++代码实现,分别展示了如何结合多重背包和二进制优化以及如何利用DFS来解决问题。...
晒代码之二——多重背包(POJ1276)
而多重背包问题是指有N种物品,每种物品数量有限,目标同样是确定哪些物品装入背包,以使背包中物品的总价值最大。 ### 知识点二:01背包问题 01背包问题可以描述为:给定一个固定大小的背包和一系列具有重量和...
- 背包问题分为完全背包、多重背包等多种类型,需要根据不同场景设计不同的策略。 3. **矩阵链乘法** - 推荐题目:[poj2531](https://vjudge.net/problem/POJ-2531)、[poj1416]...
- 背包问题的各种变体:0/1背包、完全背包、多重背包等。 #### 5. 数据结构题 数据结构题考察的是对各种数据结构的理解和应用能力,如堆、树、图等。 - **知识点**: - 基础数据结构:数组、链表、栈、队列等。 ...
背包之01背包、完全背包、多重背包详解 Dynamic+Programming 典型的动态规划,用递归下的记忆化搜索来实现 1088 POJ 动态规划加速原理之四边形不等式 基于连通性状态压缩的动态规划问题 对一些DP题目的小结 树型动态...
- POJ 1260: 多重背包问题 - POJ 2533: 背包问题的特殊应用 - **编辑距离**:用于计算两个字符串之间的最小编辑距离。 - **示例题目**: - POJ 3176: 编辑距离问题 - POJ 1080: 编辑距离的变种 - POJ 1159: ...
- `3020`:可能涉及到二维或多重状态的动态规划问题,通常用于解决最优化问题,如背包问题、最长公共子序列等。 - `3211`:可能是一个需要用到动态规划来寻找最优解的问题,例如矩阵链乘法、斐波那契数列等。 2. ...
3. 1157_DP.cpp的源码可能涉及到的问题可能是“背包问题”的变种,比如“完全背包”或“多重背包”问题,或者可能是“最长递减子序列”等。在解决这类问题时,DP通常会结合贪心策略,通过选择具有最大效益的元素来...
2. **动态规划分类**:了解常见类型的动态规划问题,如最短路径问题(Floyd-Warshall,Dijkstra,Bellman-Ford等)、背包问题(完全背包,0-1背包,多重背包等)、图论问题(最小生成树,最长路径等)。 3. **C++...
* 动态规划进阶:完全背包、多重背包等各种背包问题、POJ 上完成一定数目的动态规划题目、状态压缩动态规划、树形动态规划 * 搜索:回溯法熟练应用、复杂的搜索题目练习、双向广度优先搜索、启发式搜索 通过系统化...
- **策略建议**:0/1背包、完全背包和多重背包是三种主要的背包问题类型。需要掌握它们的解决思路和状态转移方程。 2. **编辑距离**:编辑距离是衡量两个字符串之间差异的一种方法。 - **策略建议**:通过计算两...
- **背包问题**:0-1背包、完全背包、多重背包等。 - **字符串算法**:KMP、Trie、后缀树、后缀数组等。 在学习这些算法时,建议通过实际编程练习来加深理解,可以尝试解决POJ等在线编程平台上的题目,如poj3096、...
### DP的单调队列优化详解 ...- 单调队列在多重背包问题中的应用,可以参见“浅谈DP优化之单调队列优化.doc”。 以上内容概述了DP的单调队列优化的基本概念、实现方式及应用场景,希望对学习者有所帮助。
### 多重背包问题 **问题描述**:给定一个数组`Pairs`、`Multi`、`Low`、`Up`,需要构造一个数组`Table`,使得`Low[i] [i] [i]`,且满足条件`∑ Multi[i] * Table[i] = 0`,同时使`∑ Pairs[i] * Table[i]`尽可能大...
2.6 随机素数测试和大数分解 (POJ 1811) . . . . . . . . . . . . . . . . . . . . . . . 29 2.7 欧拉函数 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32 2.7.1 分解质因素求...