P1833樱花

题目大意:有n颗樱花树,你的总时间为T,现在n课树,每次观看要花费w时间,能获取v点价值,最多能参观s次,如果s等于0,则可以观看无限次,问你在T时间内 获得的最大价值是多少。
思路:这道题是一道混合背包的题,但是时间n《=10000,会超时,所以要用到二进制拆分优化。
把s[i]拆分为1+2+3+4+。。。+2……k,然后就可以转化为01背包的问题,完全背包可以把他的空间记为999999,不要太大,一般百万就足够了

代码:

#include<bits/stdc++.h>
#define INF 0x3f3f3f3f3f3f3f3f
#define inf 0x3f3f3f3f
#define FILL(a,b) (memset(a,b,sizeof(a)))
#define re register
#define lson rt<<1
#define rson rt<<1|1
#define lowbit(a) ((a)&-(a))
#define ios std::ios::sync_with_stdio(false);std::cin.tie(0);std::cout.tie(0);
#define fi first
#define rep(i,n) for(int i=0;(i)<(n);i++)
#define rep1(i,n) for(int i=1;(i)<=(n);i++)
#define se secondusing namespace std;
typedef long long  ll;
typedef unsigned long long  ull;
typedef pair<int,int > pii;
int dx[4]= {-1,1,0,0},dy[4]= {0,0,1,-1};
const ll mod=10007;
const ll N =1e6+10;
const double eps = 1e-4;
const double pi=acos(-1);
ll gcd(int a,int b){return !b?a:gcd(b,a%b);}
int f[N];
int n,cnt,t,p1[N],p2[N];
int lh,lm,rh,rm;
int w[N],v[N],s[N];
void dis()
{for(int i=1;i<=n;i++){int a=1;while(s[i]!=0){p1[++cnt]=w[i]*a;p2[cnt]=v[i]*a;s[i]-=a;a*=2;if(s[i]<a){p1[++cnt]=w[i]*s[i];p2[cnt]=v[i]*s[i];break;}}}
}
int main()
{scanf("%d:%d%d:%d%d",&lh,&lm,&rh,&rm,&n);int time=-lh*60-lm+rh*60+rm;//out<<time<<endl;for(int i=1;i<=n;i++){cin>>w[i]>>v[i]>>s[i];if(s[i]==0) s[i]=9999999;}dis();for (int i = 1; i <= cnt; i ++ )for (int j = time; j>=p1[i]; j--){f[j]=max(f[j],f[j-p1[i]]+p2[i]);}cout<<f[time];return 0;
}

P1833 樱花——混合背包 二进制优化成01背包相关推荐

  1. 背包模型dp1:01背包,完全背包,多重背包的两大优化的详解

    01背包问题: 状态表示:f[i][j]表示从只从前i个物体里面选,切总体积不超过j的选法的集合状态表示:f[i][j]表示从只从前i个物体里面选,切总体积不超过j的选法的集合状态表示:f[i][j] ...

  2. HDU 5445 Food Problem 多重背包+二进制优化

    据说也可以用单调队列优化多重背包,但是我不会,所以还是选择了二进制优化... 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5445 题意:先给n,m, ...

  3. [多重背包+二进制优化]HDU1059 Dividing

    题目链接 题目大意: 两个人要把一堆宝珠,在不能切割的情况下按照价值平分,他们把宝珠分成6种价值,每种价值的宝珠n个. n<=200000 思考: 首先如果加和下来的价值是一个偶数 那么还分毛啊 ...

  4. 01背包,完全背包,多重背包,混合背包,二维费用背包,分组背包,背包问题求方案数

    1 01背包问题 有 NNN 件物品和一个容量是 VVV 的背包.每件物品只能使用 一次. 第 iii 件物品的体积是 viv_ivi​,价值是 wiw_iwi​.求解将哪些物品装入背包,可使这些物品 ...

  5. 1919: kirito's 星爆气流斩(多重背包转换为01背包+二进制优化)

    Description 主角kirito是使用世界首款完全潜行游戏"刀剑神域(Sword Art Online)"的玩家.曾经很幸运的参与过封闭测试,并买下正式版的kirito,正 ...

  6. 01背包输出路径、完全背包、多重背包

    背包问题 一.01 Knapsack(输出路径- >选的物品) 二.完全背包 1.三重循环,极可能TLE,滚动数组优化后j逆向枚举 2.二重,优化消去变量k(没有特别厘清,但可以直接从完全背包角 ...

  7. 背包问题基础模型深度总结-文长慎入(01背包,完全背包,多重背包)

    先等一下,字多预警,密集恐惧症慎入,喂,你,就是你,小板凳搬好了吗,站久了可是会腿酸的 无节操地王婆卖瓜一下, 本文 深度好文 目录 先扯两句 0-1背包 其它类似的状态定义 1 2 小结 3  记忆 ...

  8. 代码随想录42——动态规划:0-1背包理论基础、0-1背包滚动数组、416分割等和子集

    文章目录 1.0-1背包理论基础 1.1.概述 1.2.0-1背包 1.3.二维dp数组01背包--动规五部曲 1.4.完整测试代码 2.0-1背包滚动数组 2.1.一维滚动数组 2.2.一维dp数组 ...

  9. 【恋上数据结构】动态规划(找零钱、最大连续子序列和、最长上升子序列、最长公共子序列、最长公共子串、0-1背包)

    动态规划(Dynamic Programming) 练习1:找零钱 找零钱 - 暴力递归 找零钱 - 记忆化搜索 找零钱 - 递推 思考题:输出找零钱的具体方案(具体是用了哪些面值的硬币) 找零钱 - ...

最新文章

  1. msysGit 中文环境配置及跨平台开发注意事项
  2. React 服务端渲染方案完美的解决方案
  3. 应用jBPM4解决中国特色的流程需求 (看过之后,强烈推荐)
  4. oracle自动imp脚本
  5. 异步加载js的三种方法
  6. TCP/IP协议 和 如何实现 互联网上点对点的通信
  7. Linux共享文件夹中毒,linux服务器中毒利用Find查找病毒例子
  8. C语言-- 大端小端详解
  9. 台式计算机技术方案,2017年4月自考02316计算机应用技术真题及答案
  10. 【乘风破浪的开发者】丁一超:从AI实战营出发探索未知的AI世界
  11. APP推广有效果,APP地推要以用户需求为核心
  12. keras ConvLSTM2D 的简单应用
  13. 【比赛】新冠肺炎疫情趋势预测大赛~推荐大家参加下
  14. thinkphp 3.+ Apache url重写问题(.htaccess)
  15. word计算机公式怎么算,word怎么实现自动计算公式
  16. 大疆M3508电机使用CAN通信进行速度PID闭环控制详解
  17. 诈骗短信报警12110
  18. 如何在python中获得当前时间前几天的日期
  19. 企业微信(H5打开)调用微信小程序
  20. 怎么把本地rpm包导入linux,Linux在本地yum源中增加rpm包(示例代码)

热门文章

  1. 史上最硬核文科生,擅长解决数学难题,却视考试成为终生噩梦
  2. 原来这些行业的“潜规则”是这样的...
  3. 数理思维这样培养才有效,从小就赢在方法上,每本不足3元!!
  4. 如何通过自学找到一份开发的工作?
  5. 干货|MIT线性代数课程精细笔记[第二课]
  6. java 线程 插件_我的第一个Chrome插件:天气预报应用
  7. mysql 5.7.17 源码安装_mysql5.7.17源码安装
  8. 广东省计算机应用(2010),2010年广东省高等教育自学考试计算机基础及应用(N)试卷(课程代码.doc...
  9. 俄语使用计算机怎么说,计算机俄语常用词汇
  10. pandownload 卢本伟_PanDownload复活了!60MB/s!附下载地址