Cpp环境【Usaco2007 Jan】【CQYZOJ1432】解题

动态规划DP问题分类和经典题型 解题关键: 理解结构特征,抽象出状态,写成状态转移方程。 动态规划理念: 1.最优化原理    1951年美国数学家R.Bellman等人,根据一类多阶段问题的特点,把多阶段决策问题变换为一系列互相联系的单阶段问题,然后逐个加以解决。一些静态模型,只要人为地引进“时间”因素,分成时段,就可以转化成多阶段的动态模型,用动态规划方法去处理。与此同时,他提出了解决这类问题的“ 阅读详情
【问题描述】  

  过去的日子里,农夫John的牛没有任何题目。可是现在他们有题目,有很多的题目。 精确地说,他们有 P 道题目要做。并且他们还离开了农场并且象普通人一样找到了工作,他们的月薪是M 元(上个月的工资在下月初发放)。
  
  他们的题目是一流的难题,所以他们得找帮手。帮手们不是免费的,但是他们能保证在一个月内作出任何题目。每做一道题需要两笔付款:第一笔A_i(1 <= A_i <= M) 元在做题的那一个月初支付,第二笔B_i元(1 <= B_i <= M)在做完后的下一个月初支付。 每一个月牛们用上一个月挣的钱来付款。牛没有任何存款意识,所以每个月的节余都会拿去买糖吃掉。

  因为题目是相互关连的,它们必须按顺序解出。 比如,题目3必须在解题目4之前或同一个月解出。

  找出牛们做完所有题目并支付完所有款项的最短月数。

【输入格式】  

  第一行: M 和 P;
  第2…P+1行: 第i行包含A_i和B_i, 分别是做第i道题的预先付款和完成付款.

【输出格式】  

  第一行: 牛们做完题目并付完帐目的最少月数.

【输入样例】  

100 5
40 20
60 20
30 50
30 50
40 40

【输出样例】  

6

【样例解释】  
Month本月的首付本月的尾款结余(买糖)解决的问题
1\\00
240+60\00
330+3020+2001,2
4\50+5001,2,3,4
540\601,2,3,4
6\40601,2,3,4,5
【数据范围】  

1 <= P <= 300
1 <= M <= 1000

【传送矩阵】

CQYZOJ p1432 传送矩阵

【思路梳理】

  是不是贪心的既视感?应该来说所有人的第一反应都应该是贪心算法:思考最优值,似乎可以将所有的problem尽可能地往前排,使得完成所有问题的时间尽可能的短。
  但是如此一来会产生漏洞,考虑如下的一组数据:

   7 3
   2 5
   2 5
   5 2

  那么按照贪心的思路,显然答案应该如下:

Month本月的首付本月的尾款结余(买糖)解决的问题
1\\00
22\50
32501
4\521,2
55\21,2
6\251,2,3

  而实际上的最优值是5,说明如下:

Month本月的首付本月的尾款结余(买糖)解决的问题
1\\00
22\50
3\521
42+5\01
5\5+201,2,3

  发现区别了吗?在解法2中,第2、3个问题是一起完成的,在等待problem1的问题的尾款付清后的下一个月才启动了problem2、problem3的首付。而在解法1中,problem1的尾款、problem2的首付是一起支付的!也就是说,问题在于是否应该等待上一个问题付清尾款(结余更多的钱来同时开启更多个问题)再开始付下面的问题的款。
  显然,如果这么考虑的话,我们可以消除掉后效性:同时考虑上一个月的所有尾款和这一个月的所有首付。显然这是一个分组的问题,每一个月同时进行解答的problem属于同一个组,那么可以设计如下的状态函数&状态转移方程:

状态函数d[i][j]=解答前i个problem且最后一次连续进行j个problem的解答所需要的最小月数

状态转移方程:
  1.在前i~j件事情付清尾款当月付j个项目的首款:d[i][j]=min{d[i-j][x]+1 | sumb[j-1-x+1][j-1]+suma[j][i]<=pay}
  2.在前i~j件事情付清尾款后的一个月付j个项目的首款:d[i][j]=min{ d[i-j][x]+2 | sumb[j-1-x+1][j-1]<=pay && suma[j][i]<=pay }

笔者简单解释一下:
  假设我们现在已经完成了i-j个problem的解答(上一个月同时付了x个problem的首款),现在要付连续j个problem的首款。在本月结束时,我们要保证前i个程序都已经在解答中(或者已经解出)且本月进行了j个解答,那么截止本月初付过前x个problem的尾款后,总共是完成了i-j个problem;本月要完成的问题的编号是从i-j+1一直到i,那么我们就可以推出,上一个月要完成的问题的编号为i-j-x+1到i-j。按照我们上面分析的,我们有两种选择:
  1.同时付清上一组x个problem的尾款和这一组j个problem的首付;
  2.在上一组x个problem的尾款付清后,进行j个problem的首付。
设suma[i][j]、sumb[i][j]分别为首付前缀和尾款前缀和,分别表示第i个问题至第j个问题的首付之和、第i个问题至第j个问题的尾款之和。
  
  无论如何,都需要保证这个月的结余必须为正数、且下一个月将要付清的本月尾款必须也不能超过工薪(如果大于了工薪,那么本月或下一个月奶牛就破产了=_+)。

【Cpp代码】
#include<iostream>
#include<cstring>
#include<cstdio>
#define maxn 305
#define maxpay 1005
#define inf 605
using namespace std;
int pay,n,first[maxn],second[maxn],d[maxn][maxn];
int suma[maxn][maxn],sumb[maxn][maxn];//前缀和 

void dp()
{
    for(int i=0;i<=n;i++)
    for(int j=0;j<=n;j++)   d[i][j]=inf;
    d[0][0]=2;//注意一个小细节,只要问题不止1个,那么我们就只能从第2个月开始付款(第一个月的工资在第二个月月初才发到奶牛手中,所以边界至少是d[0][0]=2

    for(int i=1;i<=n;i++)
    for(int j=1;j<=i;j++)if(suma[i-j+1][i]<=pay && sumb[i-j+1][i]<=pay)//既不能在本月交不起首付也不能在下个月交不清尾款
    {
        int t1=inf,t2=inf;//两种选择
        for(int x=0;x<=i;x++)//循环,假设上一组有x个problem
        {
        if(sumb[i-j-x+1][i-j]+suma[i-j+1][i]<=pay)      t1=min(t1,d[i-j][x]+1);
        if(sumb[i-j-x+1][i-j]<=pay && suma[i-j+1][i]<=pay)  t2=min(t2,d[i-j][x]+2);
        }

        d[i][j]=min(t1,t2);//两者取最优,局部最优解是全局最优解
    }

    int ans=inf;
    for(int i=1;i<=n;i++)   ans=min(ans,d[n][i]);
    cout<<ans;//最后一次可以同时完成任意个problem只要不破产
}

int main()
{
//  freopen("in.txt","r",stdin);
    scanf("%d%d",&pay,&n);
    for(int i=1;i<=n;i++)   scanf("%d%d",&first[i],&second[i]);

    for(int i=1;i<=n;i++)//计算前缀和
    for(int j=i;j<=n;j++)   suma[i][j]=suma[i][j-1]+first[j],sumb[i][j]=sumb[i][j-1]+second[j];

    if(n)  dp();
    else printf("0");
    return 0;
}
腾讯混元Hy3智能体:从问答到任务执行的AI模型实践指南 混合专家模型(MoE)作为一种先进的神经网络架构,通过将大模型分解为多个专家网络,实现了在保持强大性能的同时显著降低计算成本。其核心原理是每个输入只激活部分专家,这种稀疏激活机制让模型能够高效处理复杂任务。在AI工程实践中,MoE架构特别适合需要多步推理的智能体应用场景,能够将传统的问答式交互升级为完整的任务执行能力。腾讯混元Hy3基于2950亿参数的MoE设计,通过快慢思考融合机制,使模型能够先快速判断任务类型,再深度规划执行路径。这种技术架构让Hy3在代码生成、工作流编排等实际业务场景中表现出色,真正实 阅读详情

相关推荐

Cpp环境【CQYZOJ3531】【CQNOI2016模拟赛(八中出题)】约瑟夫の秘制游戏

【问题描述】   YJC 很喜欢玩游戏,今天他决定和朋友们玩约瑟夫游戏。  约瑟夫游戏的规则是这样的:n个人围成一圈,从1 号开始依次报数,当报到m 时,报1、2、…、m-1 的人出局,下一个人接着从1 开始报,保证(n-1)是(m-1)的倍数。最后剩的一个人获胜。  YJC 很想赢得游戏,但他太笨了,他想让你帮他算出自己应该站在哪个位置上。【输入格式】   第一行包含两个整数n 和m,表示

天地皆逆旅,你我本行人。 1313

7.8.实验 解题参考

ProblemA(HDU2084) 这题题目都说了经典DP 由上往下推,由于结果状态多,不好处理。无疑由底往上推比较方便,都归于一个起点,只需要算出由底往上得到的最大价值即可。 方程:dp[i][j] = max(dp[i+1][j],dp[i+1][j+1])+a[i][j];#include <stdio.h> #include <string.h> #include <algorithm

lazycat233的博客 445

人工势场法在自动驾驶避障中的实践与优化

本文深入探讨了人工势场法在自动驾驶避障中的核心原理与实践优化。通过解析引力与斥力模型,揭示了经典算法在局部最优和目标不可达等问题上的局限性,并重点介绍了改进斥力场函数、引入道路边界斥力及动态参数调整等关键优化策略,有效提升了该局部路径规划算法在复杂动态场景下的实用性与鲁棒性。

weixin_29208327的博客 925

[DP]解题

题目描述 过去的日子里,农夫John的牛没有任何题目. 可是现在他们有题目,有很多的题目.精确地说,他们有P (1 &lt;= P &lt;= 300) 道题目要做. 他们还离开了农场并且象普通人一样找到了工作. 他们的月薪是M (1 &lt;= M &lt;= 1000) 元.   他们的题目是一流的难题,所以他们得找帮手.帮手们不是免费的,但是他们能保证在一个月内作出任何题目.每做一道题需...

~NULL~ 348

fluent二维叶型仿真_Fluent案例4【自然对流】

自然对流来了!!江苏的高校好多开学了,我啥时候才能开学另外,刚才看了何同学的Mac Pro深度体验视频,我好酸/(ㄒoㄒ)/~~好想拥有一台跑仿真那种sou~sou~sou~的机器。废话不多说了,进入正题!案例题目:一个矩形空腔内有500K恒温小球,矩形空腔充斥空气,边界条件绝热,模型尺寸如下,试模拟空腔内空气流动状态做出温度变化图。(尺寸大小懒得写了,在建模部分里有)操作平台:workbench...

weixin_39724469的博客 3670

第12篇: COZE 实操【自动生成每日英语短视频】详细制作流程

通过以上详细流程,你可以利用 Coze 智能体高效生成每日英语短视频。在实际操作中,若遇到问题或有新的创意需求,欢迎随时与我交流,进一步优化视频制作流程。从左侧节点库中拖拽 “开始” 节点到画布中央,设置主题输入框(如输入 “日常购物英语”),方便后续根据不同主题生成视频。2. 选题策划节点​。3. 内容生成节点​。4. 画面生成节点​。5. 配音生成节点​。6. 音频匹配节点​。7. 视频合成节点​。

AI实操部署-深耕AI领域老菜鸟! 2071

CQYZOJ P1392 拔河问题

题目\(1\) Description   一个学校举行拔河比赛,所有的人被分成了两组,每个人必须(且只能够)在其中的一组,且两个组内的所有人体重加起来尽可能地接近. Input   第\(1\)行是一个\(n\),表示参加拔河比赛的总人数,\(n<=100\),接下来的n行表示第\(1\)到第\(n\)个人的体重,每个人的体重都是整数\((1<=weight<=45...

weixin_30954265的博客 555

从气象预报到物流规划:多尺度地理加权回归(MGWR)在ArcGIS Pro中的实战应用

本文深入探讨了多尺度地理加权回归(MGWR)在ArcGIS Pro中的实战应用。通过对比传统GWR模型,MGWR的核心优势在于能识别不同解释变量的独特空间作用尺度,有效解决空间异质性问题。文章结合气象预报误差修正与物流网点选址两个案例,详细讲解了从数据准备、参数设置、带宽优化到结果解读的全流程,为地理数据分析师处理复杂空间数据提供了强大工具。

egg99的博客 1029

Cpp环境【CQYZOJ1836】【Code[VS]5230】猴子

【问题描述】   一只猴子找到了很多香蕉树,这些香蕉树都种在同一直线上,而猴子则在这排香蕉树的第一棵树上。这只猴子当然想吃尽量多的香蕉,但它又不想在地上走,只想从一棵树跳到另一棵树上.同时猴子的体力有限,它不能一次跳得太远或跳得次数太多,每当他跳到一棵树上,就会把那棵树上的香蕉都吃掉。那么,它最多能吃多少个香蕉呢?【输入格式】   输入第一行为三个整数,分别是香蕉树的棵数N,猴子每次跳跃的最

天地皆逆旅,你我本行人。 855

MobaXterm详细使用教程

当然MobaXterm的功能远不止这些,但这些是最基本,最常用的,因此先拿出来讲。点击确定后,输入密码(输入密码时并不会显示,只管输入后按确定即可,第一次登陆成功后会提示保存密码,一般选择同意),就可以连接上虚拟机了。(2) 我们可以直接apt-get安装vim等常用功能(或者官网下载插件),实现在windows下模拟linux环境,这样就可以使用vi命令准备INCAR文件,也可以使用Gnuplot进行绘图。支持 Unix 命令(bash,ls,cat,sed,grep,awk,rsync,…

博客 4万+

AI测试实战:用文心一言5分钟生成登录功能测试用例(附Excel模板)

本文详细介绍了如何利用AI工具(如文心一言)在5分钟内高效生成登录功能测试用例,并提供了可直接应用的Excel模板。通过对比传统手工编写与AI生成的效率差异,展示了AI在软件测试领域的巨大优势,包括减少重复劳动、避免边界条件遗漏和提升格式标准化。文章还包含实战技巧、高级应用方案和行业最佳实践,助力测试人员快速提升工作效率。

weixin_30379531的博客 410

Cpp环境【CQYZOJ3145】【CQOI2916】学生宿舍依法集会权遭受侵害案例

【问题描述】   新的学生宿舍开放了,它由m栋建筑物构成,标号为1到m。开始时,学生宿舍都是空的,很快 有N个学生搬进去了。刚好每天搬进去一个。 每次有新同学搬进宿舍,那栋建筑将会举行一个大型的 party。party 的噪声和该建筑物里的 学生的数量相等。宿舍管理员不喜欢噪声,所以他们会不定期的清空某栋建筑物。清空的方法就是把 该栋建筑物的学生全部赶到另外的学生宿舍(这 m 栋宿舍以外的地

天地皆逆旅,你我本行人。 664

prplOS介绍

介绍prplOS是什么,特性、框架、编译等。

四儿家的小祖宗的博客 2119

POJ - 3265/USACO - Jan07 Gold Problem Solving 动态规划(DP) | 对USACO官方题解0ms程序的解释

【问题描述】 过去的日子里,农夫John的牛没有任何题目。可是现在他们有题目,有很多的题目。 精确地说,他们有 P 道题目要做。并且他们还离开了农场并且象普通人一样找到了工作,他们的月薪是M 元(上个月的工资在下月初发放)。 他们的题目是一流的难题,所以他们得找帮手。帮手们不是免费的,但是他们能保证在一个月内作出任何题目。每做一道题需要两笔付款:第一笔A_i(1 <= A_i <= M) 元在做题

灬豪侠彡 985

云原生之容器编排实践-在K8S集群中使用Registry2搭建私有镜像仓库

基于前面搭建的3节点 Kubernetes 集群,今天我们使用 Registry2 搭建私有镜像仓库,这在镜像安全性以及离线环境下运维等方面具有重要意义。作为测试环境,本次使用 Registry2 搭建了私有镜像仓库,实际生产环境建议使用 Harbor;创建了一个 local-storage 的 StorageClass ,并使用本地磁盘的方式创建使用 PV ,实际建议使用 NFS 。

Heartsuit的博客 2461

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

Cpp环境【CQYZOJ1496】【Code[VS]5287】搬家大冒险

【问题描述】   你正在考虑用一辆搬家卡车来帮你从重庆搬到成都。鉴于当今飞涨的油价,你想知道这个大家伙要吃掉多少升油。   这辆卡车每走一公里消耗一公升汽油。油箱的容量为200公升。当你从重庆租到它的时候,油箱是半满的。当你到达成都去归还卡车的时候,油箱必须至少是半满,否则租赁公司会敲诈你更多的油费,但也不想在中途因为没有油而抛锚。【输入格式】   第一个整数为重庆到成都的距离(单位:公里

天地皆逆旅,你我本行人。 696

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

到底什么是dp思想(内含大量经典例题,附带详细解析)

&#13; 期末了,通过写博客的方式复习一下dp,把自己理解的dp思想通过样例全部说出来说说我所理解的dp思想dp一般用于解决多阶段决策问题,即每个阶段都要做一个决策,全部的决策是一个决策序列,要你求一个最好的决策序列使得这个问题有最优解将待求解的问题分为若干个相互联系的子问题,只在第一次遇到的时候求解,然后将这个子问题的答案保存下来,下次又遇到的时候直接拿过来用即可dp和分...

Y先森0.0 6万+

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

HDU 动态规划(46道题目)倾情奉献~ 【只提供思路与状态转移方程】

Robberies http://acm.hdu.edu.cn/showproblem.php?pid=2955     背包;第一次做的时候把概率当做背包(放大100000倍化为整数):在此范围内最多能抢多少钱  最脑残的是把总的概率以为是抢N家银行的概率之和… 把状态转移方程写成了f[j]=max{f[j],f[j-q[i].v]+q[i].money}(f[j]表示在概率j之下能抢的大洋);

遇见_缘 4836

HDU - 2018 母牛的故事

有一头母牛,它每年年初生一头小母牛。每头小母牛从第四个年头开始,每年年初也生一头小母牛。请编程实现在第n年的时候,共有多少头母牛? Input 输入数据由多个测试实例组成,每个测试实例占一行,包括一个整数n(0<n<55),n的含义如题目中描述。 n=0表示输入数据的结束,不做处理。 Output 对于每个测试实例,输出在第n年的时候母牛的数量。 每个输出占一行。 Sample Inp...

slass-mot-odet 742

jzoj1279 解题 (dp)

1279. 解题Description  过去的日子里,农夫John的牛没有任何题目. 可是现在他们有题目,有很多的题目.精确地说,他们有P (1 <= P <= 300) 道题目要做. 他们还离开了农场并且象普通人一样找到了工作. 他们的月薪是M (1 <= M <= 1000) 元.   他们的题目是一流的难题,所以他们得找帮手.帮手们不是免费的,但是他们能保证在一个月内作出任何题目.每做一道

闲人请进 555

vijos-p1322 2008.11.8

vijos-p1322 2008.11.8 描述 Description        过去的日子里,农夫John的牛没有任何题目. 可是现在他们有题目,有很多的题目 精确地说,他们有P (1 他们的题目是一流的难题,所以他们得找帮手.帮手们不是免费的,但是他们能保证在一个月内作出任何题目.每做一道题需要两笔付款, 第一笔A_i(1 因为题目是相互关连的,它们必须按顺序解出. 比如,

Batman_的博客 521

JZOJ 7.11 B组第一题 解题

题目:   过去的日子里,农夫John的牛没有任何题目. 可是现在他们有题目,有很多的题目.精确地说,他们有P (1 <= P <= 300) 道题目要做. 他们还离开了农场并且象普通人一样找到了工作. 他们的月薪是M (1 <= M   他们的题目是一流的难题,所以他们得找帮手.帮手们不是免费的,但是他们能保证在一个月内作出任何题目.每做一道题需要两比付款, 第一笔A_i(1 <= A

李佩爽的博客 428

解题

Description   过去的日子里,农夫John的牛没有任何题目. 可是现在他们有题目,有很多的题目.精确地说,他们有P (1 <= P <= 300) 道题目要做. 他们还离开了农场并且象普通人一样找到了工作. 他们的月薪是M (1 <= M <= 1000) 元.   他们的题目是一流的难题,所以他们得找帮手.帮手们...

angw337679452的博客 163

译文及题解 电话线Telephone Wire(动态规划)

电话线Telephone Wire [USACO07NOV]Question In English(BY USACO) 中文翻译(翻译自Stockholm_Sun)Telephone Wire 电话线Farmer John’s cows are getting restless about their poor telephone service; they want FJ to replac

Stockholm_Sun的博客 1246

学生宿舍

【问题描述】        新的学生宿舍开放了,它由M栋建筑物构成,标号为1到M。开始时,学生宿舍都是空的,很快有N个学生搬进去了。刚好每天搬进去一个。    每次有新同学搬进宿舍,那栋建筑将会举行一个大型的party。party的噪声和该建筑物里的学生的数量相等。宿舍管理员不喜欢噪声,所以他们会不定期的清空某栋建筑物。清空的方法就是把该栋建筑物的学生全部赶到另外的学生宿舍(这M栋宿

cqyz_yuyuko的博客 830

POJ3612 & 洛谷P2885 [USACO07Nov] Telephone Wire 架设电话线 dp

题目链接:洛谷 POJ 题目描述 最近,Farmer John的奶牛们越来越不满于牛棚里一塌糊涂的电话服务 于是,她们要求FJ把那些老旧的电话线换成性能更好的新电话线。 新的电话线架设在已有的N(2≤N≤100,000)N(2\leq N\leq 100,000)N(2≤N≤100,000)根电话线杆上, 第i根电话线杆的高度为heightiheight_iheighti​米(1≤heighti≤...

The_OIer的博客 2956
上一篇: Cpp环境【CQYZOJ1496】【Code[VS]5287】搬家大冒险
下一篇: Cpp环境【OnlineJudge2704】【CQYZOJ3188】寻找极大点
cqyz_Lebmond
博客等级 码龄10年 18粉丝 59原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值