hdu5410(完全背包变形)
这是道完全背包,关键点在于如何处理每种物品,第一次放时,价值为A+B,以后放时,价值为A。
#include <iostream>
#include <stdio.h>
#include <string.h>
#include <algorithm>
#define maxn 300000
#define LL long long
using namespace std;
int V[maxn],A[maxn],B[maxn];
int d[maxn]; //d[j]代表容量为j的背包,处理到第i种物品时的最大值
int p[maxn]; //p[j]代表容量为j的背包,处理到上一行物品的最大值
int M,N;
void init()
{
memset(d,,sizeof(d));
memset(p,,sizeof(p));
}
void solve()
{
for(int i=;i<=N;i++)
{
for(int j=V[i];j<=M;j++)
{
d[j]=max(d[j-V[i]]+A[i],d[j]); //要么不是第一个放
d[j]=max(p[j-V[i]]+A[i]+B[i],d[j]); //要么是第一个放
}
for(int j=;j<=M;j++)
{
p[j]=d[j];
}
}
int ans=;
for(int j=;j<=M;j++)
ans=max(ans,d[j]);
printf("%d\n",ans);
}
int main()
{
//freopen("test.txt","r",stdin);
int t;
scanf("%d",&t);
while(t--)
{
init();
scanf("%d%d",&M,&N);
for(int i=;i<=N;i++)
{
scanf("%d%d%d",&V[i],&A[i],&B[i]);
}
solve();
}
return ;
}
但是这样考虑的话,写的时候,就写成了下面这个样子,如果j-V[i]放过的话,那么j容量就只能不放,或者放2个以上。
#include <iostream>
#include <stdio.h>
#include <string.h>
#include <algorithm>
#define maxn 300000
#define LL long long
using namespace std;
int V[maxn],A[maxn],B[maxn];
int d[maxn];
int M,N;
int visit[maxn];
void init()
{
memset(d,,sizeof(d));
}
void solve()
{
for(int i=;i<=N;i++)
{
memset(visit,,sizeof(visit));
int t=;
for(int j=V[i];j<=M;j++)
{
if( visit[j-V[i]]==) //如果之前没有放过
{
if(d[j-V[i]]+A[i]+B[i]>=d[j]) //加上A+B
{
d[j]=d[j-V[i]]+A[i]+B[i];
visit[j]=;
}
}
else //如果放过,加上A
{
// if(j==M)
// printf("d[j]: %d d[j-V[i]] %d V[i] %d\n",d[j],d[j-V[i]],V[i]);
if(d[j-V[i]]+A[i]>=d[j])
{
d[j]=d[j-V[i]]+A[i];
visit[j]=;
}
}
// d[j]=max(d[j-V[i]]+A[i]+B[i],d[j]);
printf("%d ",d[j]);
t++;
if(t%==)
printf("\n");
}
printf("\n\n");
}
printf("%d\n",d[M-]);
}
int main()
{
freopen("test.txt","r",stdin);
int t;
scanf("%d",&t);
while(t--)
{
init();
scanf("%d%d",&M,&N);
for(int i=;i<=N;i++)
{
scanf("%d%d%d",&V[i],&A[i],&B[i]);
}
solve();
}
return ;
}
hdu5410(完全背包变形)的更多相关文章
- FZU 2214 Knapsack problem 01背包变形
题目链接:Knapsack problem 大意:给出T组测试数据,每组给出n个物品和最大容量w.然后依次给出n个物品的价值和体积. 问,最多能盛的物品价值和是多少? 思路:01背包变形,因为w太大, ...
- Codeforces Round #214 (Div. 2) C. Dima and Salad (背包变形)
C. Dima and Salad time limit per test 1 second memory limit per test 256 megabytes input standard in ...
- codeforce Gym 101102A Coins (01背包变形)
01背包变形,注意dp过程的时候就需要取膜,否则会出错. 代码如下: #include<iostream> #include<cstdio> #include<cstri ...
- HDU 2639 Bone Collector II(01背包变形【第K大最优解】)
Bone Collector II Time Limit: 5000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others ...
- P1282 多米诺骨牌 (背包变形问题)
题目描述 多米诺骨牌有上下2个方块组成,每个方块中有1~6个点.现有排成行的 上方块中点数之和记为S1,下方块中点数之和记为S2,它们的差为|S1-S2|.例如在图8-1中,S1=6+1+1+1=9, ...
- 【01背包变形】Robberies HDU 2955
http://acm.hdu.edu.cn/showproblem.php?pid=2955 [题意] 有一个强盗要去几个银行偷盗,他既想多抢点钱,又想尽量不被抓到.已知各个银行 的金钱数和被抓的概率 ...
- J-流浪西邮之寻找火石碎片 【经典背包变形】
题目来源:2019 ACM ICPC Xi'an University of Posts & Telecommunications School Contest 链接:https://www. ...
- CF#214 C. Dima and Salad 01背包变形
C. Dima and Salad 题意 有n种水果,第i个水果有一个美味度ai和能量值bi,现在要选择部分水果做沙拉,假如此时选择了m个水果,要保证\(\frac{\sum_{i=1}^ma_i}{ ...
- 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 ...
随机推荐
- UVA11090 Going in Cycle!! 【SPFA】
题意:求一个无向图的边权平均值最小的环 思路:假设环中Σwi/t<ans 那变形一下就是Σwi<ans*t → Σ(wi-ans)< 0 这样就可以二分答案做了 #include & ...
- hdu 3879 最大密集子图(点和边均带权)(模板)
/* 最大权闭合图,可以用最大密集子图来解速度更快复杂度低 题解:胡伯涛<最小割模型在信息学竞赛中的应用> 点和边均带权的最大密集子图 s-i,权为U=点权绝对值和+边的所有权值 i-t, ...
- 选课(codevs 1378)
题目描述 Description 学校实行学分制.每门的必修课都有固定的学分,同时还必须获得相应的选修课程学分.学校开设了N(N<300)门的选修课程,每个学生可选课程的数量M是给定的.学生选修 ...
- 假面舞会(codevs 1800)
题目描述 Description 一年一度的假面舞会又开始了,栋栋也兴致勃勃的参加了今年的舞会. 今年的面具都是主办方特别定制的.每个参加舞会的人都可以在入场时选择 一个自己喜欢的面具.每个面具都有一 ...
- ES6__变量的解构赋值
/* 变量的解构赋值 */ /* 基本概念 : 本质上就是一种匹配模式,只要等号两边的模式相同,那么左边的变量就可以被赋予对应的值. 结构赋值主要分为: 1. 数组的解构赋值 2. 对象的结构赋值 3 ...
- jquery的ajax提交时“加载中”提示的处理方法
方法1:使用ajaxStart方法定义一个全局的“加载中...”提示 $(function(){ $("#loading").ajaxStart(function(){ ...
- win7 休眠功能的开启与关闭
1. 打开控制面板得下面目录,编辑计划设置
- 使用Guava适配不同的callback
Cache<Key,Value> cache =CacheBuilder.newBuilder() .maximumSize(1000) .build();// look Ma, no C ...
- 2003-07-16T01:24:32Z这是什么时间格式
这是标准的XML Schema的"日期型数据格式”. T是代表后面跟着“时间”.Z代表0时区,或者叫UTC统一时间. 世界的每个地区都有自己的本地时间,在Internet及无线电通信时,时间 ...
- Android NFC近场通信02----读写卡的准备工作
Android NFC近场通信02----读写卡的准备工作 因为公司接了一个听上去感觉比較NB的项目.给某油田做派工系统 .并由小女子负责Androi ...