这道题好几天前就写出了记搜代码,但是理论上空间恰好够,实际上不论是用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. AntDesignBlazor示例——分页查询

    本示例是AntDesign Blazor的入门示例,在学习的同时分享出来,以供新手参考. 示例代码仓库:https://gitee.com/known/BlazorDemo 1. 学习目标 分页查询框 ...

  2. Git日志的相关操作

    显示日志 最单纯的日志命令 git log 单条显示 git log -条数 # 例如 git log -2 显示两条 提交信息单行输出 git log --oneline 日志图表显示 git lo ...

  3. SSM整合 tomcat报错: <严重 [RMI TCP Connection(22)-127.0.0.1] org.apache.catalina.core.StandardContext.startInternal 一个或多个筛选器启动失败。完整的详细信息将在相应的容器日志文件中找到>

    前提:学了一个暑假 从Javaweb -> mybits ->spring -> spring-mvc 打算跟着网上ssm整合项目做一个项目 在完成最后一步spring对spring ...

  4. 玩转Python:用Python处理文本数据,附代码

    Python 提供了多种库来处理纯文本数据,这些库可以应对从基本文本操作到复杂文本分析的各种需求.以下是一些常用的纯文本处理相关的库: str 类型: Python 内建的字符串类型提供了许多简便的方 ...

  5. DNSlog注入(利用DNSlog平台将SQL盲注变成回显注入)

    前言 什么是UNC 什么是DNSlog注入 DNSlog注入的条件 防止DNSlog注入的几个措施 sqli-labs试验 前言 前几天面试的时候,面试官问我知不知道OOB(带外数据). 当时我蒙了, ...

  6. CTFHub 栈溢出 ret2text exp代码

    exp代码: from pwn import * host='challenge-1868f48f1e630fd3.sandbox.ctfhub.com' port=27988 p=connect(h ...

  7. JavaFx之SceneBuilder添加其他依赖库(十六)

    JavaFx之SceneBuilder添加其他依赖库(十六) Could not open 'xxxxx.jar' Open operation has failed. Make sure that ...

  8. Redis 的主从复制

    Redis 主从复制是指:将一台 Redis 服务器的数据复制到其它的 Redis 服务器,前者所在的 Redis 服务器也被称为 "主节点"(Master / Leader),后 ...

  9. .NET开源、强大的Web报表统计系统

    前言 今天分享一个.NET开源.强大的Web报表统计系统:CellReport. 项目官方介绍 CellReport 诞生的初衷是为了解决日常快速制作统计报表的需要. CellReport 是一个为复 ...

  10. AI 图像自动补全 Uncrop 工具介绍

    ClipDrop Uncrop是一款基于AI的图像自动补全工具,由StabilityAI旗下的Clipdrop开发.通过利用StableDiffusionXL开发的算法和深度学习技术,Uncrop可以 ...