让人难以想出的动态转移方程小集

总有一些动态转移方程让人很难想,现在先让我们看几道题吧。

1.luoguP4138 [JOISC2014]挂饰:

题目描述

JOI君有N个装在手机上的挂饰,编号为1...N。 JOI君可以将其中的一些装在手机上。

JOI君的挂饰有一些与众不同——其中的一些挂饰附有可以挂其他挂件的挂钩。每个挂件要么直接挂在手机上,要么挂在其他挂件的挂钩上。直接挂在手机上的挂件最多有1个。

此外,每个挂件有一个安装时会获得的喜悦值,用一个整数来表示。如果JOI君很讨厌某个挂饰,那么这个挂饰的喜悦值就是一个负数。

JOI君想要最大化所有挂饰的喜悦值之和。注意不必要将所有的挂钩都挂上挂饰,而且一个都不挂也是可以的。

输入格式

第一行一个整数N,代表挂饰的个数。

接下来N行,第i行(1<=i<=N)有两个空格分隔的整数Ai和Bi,表示挂饰i有Ai个挂钩,安装后会获得Bi的喜悦值。

输出格式

输出一行一个整数,表示手机上连接的挂饰总和的最大值

输入输出样例

输入 #1复制

5
0 4
2 -2
1 -1
0 1
0 3

输出 #1复制

5

说明/提示

1 ≤ N ≤ 2000

0 ≤ Ai ≤ N (1≤i≤N)

−10^6 ≤ Bi ≤ 10^6 (1≤i≤N)

f[ i ] [ j ]表示前i件物品在有j个挂钩的情况下的最大价值

因为j-w[i]+1可能是个负数,没有意义,这时候就要考虑这物品直接挂在手机上即j=1,也就需要我们把j-w[i]和0取最大值保证有意义

所以正解方程为f[i][j]=max(f[i-1][j],f[i-1][max(j-w[i].a,0)+1]+w[i].b)  ;//这里的a是钩子,b是价值

注意:这里的 j 是指剩余的挂钩数量。

 1 #include <iostream>
 2 #include <cstdio>
 3 #include <algorithm>
 4 #include <cmath>
 5
 6 #define maxn 3100
 7 #define maxx -1000000000
 8 using namespace std;
 9 int f[maxn][maxn];
10 struct node{
11     int a,b;
12 }a[maxn];
13 bool cmp(node a,node b){
14     return a.a>b.a;
15 }
16 int main(){
17     int n;
18     cin>>n;
19     for(int i = 1; i <= n; i++){
20     cin>>a[i].a>>a[i].b;
21     }
22     sort(a+1,a+1+n,cmp);
23     for(int i = 0; i<= n; i++){
24         f[i][n+1]=maxx;
25         f[0][i]=maxx;//初始化要注意
26     }
27     f[0][1]=0;
28     for(int i = 1 ;i <= n; i++){
29         for(int j =0 ; j <= n; j++){
30             f[i][j]=max(f[i-1][j],f[i-1][max(j-a[i].a,0)+1]+a[i].b);
31         }
32     }
33     int maxm=maxx;
34     for(int i = 0 ; i<= n; i++){
35         maxm=max(maxm,f[n][i]);
36     }
37     cout<<maxm;
38     return 0;
39 } 

2.luoguP1412 经营与开发

你驾驶着一台带有钻头(初始能力值w)的飞船,按既定路线依次飞过n个星球。

星球笼统的分为2类:资源型和维修型。(p为钻头当前能力值)

1.资源型:含矿物质量a[i],若选择开采,则得到a[i]*p的金钱,之后钻头损耗k%,即p=p*(1-0.01k)

2.维修型:维护费用b[i],若选择维修,则支付b[i]*p的金钱,之后钻头修复c%,即p=p*(1+0.01c)

注:维修后钻头的能力值可以超过初始值(你可以认为是翻修+升级)

金钱可以透支。

请作为舰长的你仔细抉择以最大化收入。

输入格式

第一行4个整数n,k,c,w。

以下n行,每行2个整数type,x。

type为1则代表其为资源型星球,x为其矿物质含量a[i];

type为2则代表其为维修型星球,x为其维护费用b[i];

输出格式

一个实数(保留2位小数),表示最大的收入。

输入输出样例

输入 #1复制

5 50 50 10
1 10
1 20
2 10
2 20
1 30

输出 #1复制

375.00

说明/提示

【数据范围】

对于30%的数据 n<=100

另有20%的数据 n<=1000;k=100

对于100%的数据 n<=100000; 0<=k,c,w,a[i],b[i]<=100;保证答案不超过10^9

 1 #include <iostream>
 2 #include <cstdio>
 3 using namespace std;
 4 int n, f[100005], a[100005];
 5 double c, k, w, dp[100005];
 6 int main(){
 7     cin>>n>>k>>c>>w;
 8     for(int i=1; i<=n; i++)
 9         scanf("%d %d", &f[i], &a[i]);
10     for(int i=n; i>=1; i--){
11         if(f[i]==1)    dp[i] = max(dp[i+1], a[i]+dp[i+1]*(1-0.01*k));
12         else        dp[i] = max(dp[i+1], -a[i]+dp[i+1]*(1+0.01*c));
13     }
14     printf("%.2lf", dp[1]*w);
15     return 0;
16 }

原文地址:https://www.cnblogs.com/becase/p/11847062.html

时间: 2024-08-04 14:57:27

让人难以想出的动态转移方程小集的相关文章

围绕用户需求创新,数人云趟出中国容器云的真经

(上图为数人云创始人.CEO王璞) 2006年成立的AWS亚马逊云,自成立之初就一直在反复强调云计算创新之本,在于围绕用户的需求进行创新.AWS在开发新产品之前甚至会先写出新闻稿,从用户角度描述新产品后,再反过来完成产品设计.在VMworld 2017上,VMware CEO Pat Gelsinger也一再强调,云计算创新的根本,就是围绕用户需求. 本质上说,云计算并不是颠覆性技术,而是围绕用户的新型需求,通过新软件的方式,重新组织.管理.供应和运维整个IT资源链条,而这个新型需求就是云原生应

修改OpenSSL默认编译出的动态库文件名称

在 Windows 平台上调用动态链接库 dll 文件时,有两种方式:a) 隐式的加载时链接:使用 *.lib (导入库)文件,在 IDE 的链接器相关设置中加入导入库 lib 文件的名称,或在程序中加入预编译指令 #pragma comment (lib,”*.lib”).b) 显式的运行时链接.不使用 *.lib (导入库)文件,使用 Load Library(),GetProcAddress() 函数来加载动态库中的函数.要注意的是在导入库 lib 文件内部包含了其对应 dll 文件的名称

一个程序员想出了一个有趣的方式来关闭危险的Windows的骗子

你有没有在网上时,一个窗口弹出说你的电脑有病毒,并敦促你打电话给微软支持(或苹果支持)提供的号码?古董鉴定这是一个支持骗局,微软说,它真的试图欺骗你下载恶意软件,或交出你的信用卡信息-或两者.现在一个电信程序员职业已经想出了一个绝妙的,热闹,把这些骗子离线,可能的话,把他们的生意好.Roger Anderson,一个电信顾问和快乐的罗杰电话公司的老板,建立人类探测机器人停止骚扰电话手机从住所或者经营一个军队.这不是他的主要工作,他做为顾问设计电信系统他的生活.他建造的机器人军队的电话后称他的房子

想做智能代还系统,就找零零壹公司,百人技术研发出的系统

浙江零零壹亿仁信息科技有限公司我们是做支付软件app开发的,现在市面可以说大部分通道是线上支付,而且消费记录的商旅类的,短期这样的的消费对卡影响是不大,长期这样的消费记录会被银行察觉,导致用户卡出现问题.而我们是产品每一笔都是线下实体商户的,用户可自选城市新商户,模拟真实消费,从而达到养卡目的.一.市场前景:2017信用卡?代偿市场代后余额870亿左右,按银行信用卡升息资产规模估算,容量在2.71万亿左右,未来三年内保持38.6%的年化复合增长率.从目前市场发展情况来看2017代后余额规模在87

新加坡移民生活:想出都出不来了!

早些年因为工作原因我来到了新加坡,坦白的说,当时心里总觉得新加坡只是个小地方,没什么了不起,总觉得是单位委屈了自己.然而没想到的是,这一来,我却再也回不去了. 对于很多憧憬移民的中国人来说,新加坡无疑是一个彼岸的天堂,这里政治稳定,社会治安良好.环境清洁优美,俨然一派安居乐业的景象.但在当时的我眼里,新加坡只是个打工的地方:小小的新加坡,就中国一个二线城市那么大,有什么好待呢,留下来不过是因为新加坡能提供的薪资水准,是国内的五倍而已. 我05年硕士毕业后,被一个半导体公司中介招到新加坡.虽然我在

《Google想出了一个决定人员晋升的算法,然后就没有然后了......》有感

Prasad Setty 是 Google People Analytics 团队的副总裁.7 年前 Google 成立的这支团队的职责是收集和利用数据来支撑公司的管理实践.其使命很简单,即基于数据和分析做出所有的人事决定.在今年 10 月举行的Google re:Work大会上,Setty 介绍了这支团队用科学来进行人力资源管理的一些做法.其结论是:      算法虽好,可不能滥用,人事决定终归要有人来决定.?Google 是一个由工程师成立的公司,目前也仍然由工程师统治.这家成千上万的大公司

Google想出了一个决定人员晋升的算法,然后就没有然后了......

Google 有点跑偏了,逗死我了~实践一下也好~ Prasad Setty 是 Google People Analytics 团队的副总裁.7 年前 Google 成立的这支团队的职责是收集和利用数据来支撑公司的管理实践.其使命很简单,即基于数据和分析做出所有的人事决定.在今年 10 月举行的Google re:Work大会上,Setty 介绍了这支团队用科学来进行人力资源管理的一些做法.其结论是,算法虽好,可不能滥用,人事决定终归要有人来决定. Google 是一个由工程师成立的公司,目前

[思考] 高手是怎样的?目前没想出答案

前一阵特别忙,只顾干活没有多余的时间. 这阵子不是那么忙,就有些时间来思考一些问题.今天在纠结一个问题:高手是怎样的? 这个问题其实在前几年也思考过,当时的结论记忆模糊了,但有一点可以肯定的是,目前的自己离当年期望的那个高手肯定近了一些.不然这么多年不是白干了嘛~~ 总结说,就是最近重新思考高手是怎样的? ----------------------------------------------- 想了一个下午没有想到清晰的答案,但一直在思考.尝试着从几个方面思考了: 1. 能满足社会软件行高

toolTip(用svg制作出富有动态的对话框)

昨晚看了用svg如何制作富有动态的tooltip,于是今天就心血来潮学着做一下,于是也成功做出来,也明白其中的原理,收获颇多阿!接下来要多去学习svg,这是个好东西. 这其中也注意了一些平时纠结的细节应该怎么去做,比如: <article> <section id="sound1"> </section> <section id="sound2"> </section> </article> a