这道题好几天前就写出了记搜代码,但是理论上空间恰好够,实际上不论是用new-delete还是malloc-free,都有1~2个点MLE了(最抽象的是一开始MLE两个点,我把数组两个下标调换顺序后理应得到相同的分数,但实际上...竟然变成只MLE一个点了...离谱至极),看来动态内存不是那么好使,他们实际上干的活肯定和教科书上写的不一样,他们一定背着我偷偷多申请了空间才会导致MLE。

意识到记搜的缺点是不能利用滚动数组思想把空间消耗从n*n变成n,于是不得不改写成递推式动归,但是突然身体很难受,休息了几天,今早起来挺着写了一小会代码,把这道题AC了...毕竟不能把一道题拖太久...

另外,好像根据https://blog.csdn.net/PRML_MAN/article/details/114433408里面的说法,我这个做法的三维循环还可以简化成二维循环,懒得看了,休息,哎...

90分记搜Code

#include <iostream>
#include <cstring>
#include <string>
#include <cstdio>
#include <cstdlib>
#include <algorithm>
#include <stack>
#include <queue>
#include <map>
#include <unordered_map>
#include <cmath>
using namespace std;
#define int long long
int ** DP;
int dfs(int ct,int m,const int * const a,const int * const b)//ct is counted_time,m is drug
{
if(ct==0)return 0;
if(m==0) return 0;
if(m==1) return DP[ct-1][m-1]=ct/a[m-1]*b[m-1];
if(DP[ct-1][m-1]!=-1)return DP[ct-1][m-1]; int DFS=0;
for(int i=0;i<=ct/a[m-1];i++)
DFS=max(DFS,dfs(ct-i*a[m-1],m-1,a,b)+i*b[m-1]);
return DP[ct-1][m-1]=DFS;
}
signed main()
{
//初始化
int t,m,*a,*b;
cin>>t>>m;
DP=(int**)malloc(sizeof(int*)*(t));
for(int i=0;i<t;i++)
DP[i]=(int*)malloc(sizeof(int)*(m));
for(int i=0;i<t;i++)
for(int j=0;j<m;j++)
DP[i][j]=-1;
a=(int*)malloc(sizeof(int)*(m));
b=(int*)malloc(sizeof(int)*(m));
for(int i=0;i<m;i++)
cin>>a[i]>>b[i];
//运算
cout<<dfs(t,m,a,b)<<endl;
//delete
for(int i=0;i<t;i++)
free(DP[i]);
free(DP);free(a);free(b);
return 0;
} /*超128MBMLE点(理论上不该MLE,t*m<1e7)
10000000 1
1 10000
*/

AC-传统DP-Code

#include <iostream>
#include <cstring>
#include <string>
#include <cstdio>
#include <cstdlib>
#include <algorithm>
#include <stack>
#include <queue>
#include <map>
#include <unordered_map>
#include <cmath>
using namespace std;
#define int long long
int *DP;
signed main()
{
//初始化
int t,m,*a,*b;
cin>>t>>m;
DP=(int*)malloc(sizeof(int)*(t+1));
a=(int*)malloc(sizeof(int)*(m+1));
b=(int*)malloc(sizeof(int)*(m+1));
for(int i=1;i<=m;i++)
cin>>a[i]>>b[i];
DP[0]=0;
for(int i=1;i<=t;i++)DP[i]=i/a[1]*b[1];
for(int i=2;i<=m;i++)
{
for(int j=1;j<=t;j++)
{
int DFS=0;
for(int k=0;k<=j/a[i];k++)
DFS=max(DFS,DP[j-k*a[i]]+k*b[i]);
DP[j]=DFS;
}
}
cout<<DP[t]<<endl; free(DP);free(a);free(b);
return 0;
}

P1616-DP【橙】的更多相关文章

  1. DP题目推荐合集(洛谷/UVa)

    今天下午要参加海淀区的比赛了...这几天临时抱佛脚刷了几道DP,正所谓临阵磨枪,不快也光...下面我 就把最近刷到的,自己觉得不错的动态规划题列出来: 1.P2690 接苹果 :(基础二维DP) 2. ...

  2. 清橙A1212:剪枝

    题面 清橙 Sol 一种新的树上\(DP\)姿势 从左往右按链\(DP\) 做法: 维护两个栈\(S1\),\(S2\) \(S1\)存当前的链 \(S2\)存分叉点以下要改的链 \(Dfs\),弄一 ...

  3. DP一下,马上出发

    简单DP i.May I ask you for a dance(体舞课软广植入) 这题的状态转移方程为:dp[i][j]=max(dp[i-1][j-1]+a[i][j],dp[i][j-1]);( ...

  4. DP及其优化

    常见DP模型及其构造 序列DP ARC074 RGB Sequence 题意 给你一个长度为 \(n\) 的序列和 \(m\) 组约束条件,每组条件形如 \(l_i,r_i,x_i\),表示序列上的 ...

  5. dp小结|背包问题

    1.先放上0-1背包模板 二维数组 for(int i=1;i<=n;i++)//枚举 物品 for(int j=1;j<=V;j++)//枚举体积 //这个位置是可以正序枚举的. qwq ...

  6. DP入门——01背包 & 完全背包

    01背包: 采药: https://www.luogu.org/problemnew/show/P1048 #include <iostream> #include <algorit ...

  7. 洛谷【P1616】疯狂的采药

    浅谈\(DP\):https://www.cnblogs.com/AKMer/p/10437525.html 题目传送门:https://www.luogu.org/problemnew/show/P ...

  8. 复习1背包dp

    背包问题是对于一个有限制的容器,一般计算可以装的物品的价值最值或数量.通常每个物品都有两个属性空间和价值,有时还有数量或别的限制条件,这个因体而异. 背包大概分成3部分,下面会细述这最经典的3种题型 ...

  9. DP背包问题小总结

    DP的背包问题可谓是最基础的DP了,分为01背包,完全背包,多重背包 01背包 装与不装是一个问题 01背包基本模型,背包的总体积为v,总共有n件物体,每件物品的体积为v[i],价值为w[i],每件物 ...

  10. 从《彩色圆环》一题探讨一类环上dp的解法

    清橙A1202 bzoj2201 bsoj4074 试题来源 2010中国国家集训队命题答辩 问题描述 小A喜欢收集宝物.一天他得到了一个圆环,圆环上有N颗彩色宝石,闪闪发光.小A很爱惜这个圆环,天天 ...

随机推荐

  1. Java五种设计模式实现奶茶订单生成系统小DEMO

    前言 这是大学时候上设计模式这门课写的程序,当时课程任务是要求结合五个设计模式写一个系统,最近偶然翻到,把系统分享一下. 成品预览 主界面 ​ 功能介绍 订单管理系统,实现了对订单的增删改查.且实现了 ...

  2. 【Dotnet 工具箱】推荐一个 Flutter 和 .NET 开源的实时聊天 APP

    1. 推荐一个 Flutter 和 .NET 开源的实时聊天 APP Heyy-chat-app Heyy-chat-app 是一个开源的聊天应用,使用 Flutter.Asp.Net Core We ...

  3. 华企盾DSC导致导出文件报错常见处理方法

    1.导出文件的进程和打开该文件的进程启用OLE控制是否都是未勾选,以及启用虚拟重定向是否设置一致(要么都勾选要么都不勾) 2.用procmon监控个人模式下导出非加密的文件,搜索writefile的进 ...

  4. 聊聊流式数据湖Paimon(三)

    概述 如果表没有定义主键,则默认情况下它是仅追加 表类型(Append Only Table). 根据桶(Bucket)的定义,我们有两种不同的仅追加模式:"Append For Scala ...

  5. 编写.NET的Dockerfile文件构建镜像

    创建一个WebApi项目,并且创建一个Dockerfile空文件,添加以下代码,7.0代表的你项目使用的SDK的版本,构建的时候也需要选择好指定的镜像tag FROM mcr.microsoft.co ...

  6. 技本功|数据安全之IDC数据容灾设计实现

    近年来,数据安全问题日渐受到大家的关注,对于任何一家企业,数据无疑是最重要的资产之一.提到数据容灾,大家可能会想到备库和备份的概念,那么我们先来谈谈备库与备份的区别. 备库与备份的区别 通常来讲,备库 ...

  7. 聊聊ChatGLM中P-tuning v2的应用

    论文PDF地址:https://arxiv.org/pdf/2110.07602.pdf 转载请备注出处:https://www.cnblogs.com/zhiyong-ITNote/ P-Tunin ...

  8. 开源:Taurus.DTC 微服务分布式事务框架,支持 .Net 和 .Net Core 双系列版本

    前言: 在经过1年多的深思,十几年的框架编写技术沉淀下,花了近一个月的时间,终于又为 .Net 及 .Net Core 的微服务系列框架贡献当中的一个重要组件. 1.开源地址: https://git ...

  9. 文心一言 VS 讯飞星火 VS chatgpt (40)-- 算法导论5.4 4题

    四.一次聚会需要邀请多少人,才能让其中 3 人的生日很可能相同? 文心一言: 为了解决这个问题,我们需要先计算出所有可能的生日组合数,然后计算出其中生日相同的组合数. 已知需要邀请的人数为:23人 根 ...

  10. Flutter Getx 状态管理 --- 响应式状态管理器

    状态管理 Get 并不是比任何其他状态管理器更好或更差,而是说你应该分析这些要点以及下面的要点来选择只用 Get,还是与其他状态管理器结合使用. Get不是其他状态管理器的敌人,因为Get是一个微框架 ...