最优得分 score
Solution:
一道很典型的dp题目,
对于 20% 的数据(Bi=0),直接使用01背包即可。
对于 100% 的数据,我们需要进行分析,当我们对 …a,b… 和 …b,a… (…表示的是相同的序列)进行求最大值时,我们只需对不同的序列(也就是a,b)的不同排列方式求最大值,当a消耗ta秒,每秒消耗x,b消耗tb秒,每秒消耗y时,我们得到这两种不同排列方式的不同消耗分别为 [ta*x+(ta+tb)*y]① 和 [tb*y+(ta+tb)*x]②. 对①②两式做差,得到 [ta*y-ta*x]③,令③<0得到ta*y<tb*x④;于是我们便以④为compare函数进行排序,再进行01背包求解即可。
#include<algorithm>
#include<cstring>
#include<cstdio>
using namespace std;
const int maxm=3e3+;
int f[maxm];
struct cp{
int s,x,t;
}e[maxm];
bool cmp(cp a,cp b){return a.t*b.x<a.x*b.t;}
inline int max(int a,int b){return a>b?a:b;}
inline void init(){
memset(e,,sizeof e);
memset(f,,sizeof f);
}
inline int read(){
char ch=getchar();
int x=,f=;
while(ch<''||ch>''){if(ch=='-') f=-;ch=getchar();}
while(ch>=''&&ch<='') x=x*+(ch^),ch=getchar();
return x*f;
}
int main(){
/* freopen("score.in","r",stdin);
freopen("score.out","w",stdout);*/
int T=read(),n,t,ans=;
while(T--){
init();
ans=;
n=read(),t=read();
for(int i=;i<=n;i++) e[i].s=read(),e[i].x=read(),e[i].t=read();
sort(e+,e+n+,cmp);
for(int i=;i<=n;i++)
for(int j=t;j>=e[i].t;j--)
f[j]=max(f[j],f[j-e[i].t]+e[i].s-j*e[i].x);
for(int i=;i<=t;i++) ans=max(ans,f[i]);
/* for(int i=1;i<=n;i++){
for(int j=1;j<=t;j++) f[i][j]=f[i-1][j];
for(int j=t;j>=e[i].t;j--)
f[i][j]=max(f[i-1][j],f[i-1][j-e[i].t]+e[i].s-e[i].x*j);
}*/
for(int i=;i<=t;i++) ans=max(ans,f[i]);
printf("%d\n",ans);
}
return ;
}
/*
1
4 10
110 5 9
30 2 1
80 4 8
50 3 2
Ans: 88
*/
最优得分 score的更多相关文章
- [C++]3-1 得分(Score ACM-ICPC Seoul 2005,UVa1585)
Question 习题3-1 得分(Score ACM-ICPC Seoul 2005,UVa1585) 题目:给出一个由O和X组成的串(长度为1~80),统计得分. 每个O的分数为目前连续出现的O的 ...
- [Swift]LeetCode861. 翻转矩阵后的得分 | Score After Flipping Matrix
We have a two dimensional matrix A where each value is 0 or 1. A move consists of choosing any row o ...
- Solr 按照得分score跟指定字段相乘排序
sort=product([you_field],query($q)) desc
- python小练习:读入一个考试得分,判断这个分数是哪个等级,并输出,考虑异常场景
读入一个考试得分,判断这个分数是哪个等级,并输出. 等级:>=90 优 ,>=80且小于90 良,>=70 且小于80,中,>=60且<70及格 <60 不及格 ...
- ARC120D Bracket Score 2 (模拟)
题面 给一个长度为 2 N 2N 2N 的序列 A A A,定义一个长度为 2 N 2N 2N 的合法括号序列的 得分(score) 为: 对于每对配对的括号 i , j i,j i,j, ∣ A i ...
- 机器学习&数据挖掘笔记_24(PGM练习八:结构学习)
前言: 本次实验包含了2部分:贝叶斯模型参数的学习以及贝叶斯模型结构的学习,在前面的博文PGM练习七:CRF中参数的学习 中我们已经知道怎样学习马尔科夫模型(CRF)的参数,那个实验采用的是优化方法, ...
- 多准则决策模型-TOPSIS方法
多准则决策–Multiple Criteria Decision Making 多准则决策–Multiple Criteria Decision Making 多准则决策是指在具有相互冲突.不可共度的 ...
- [codeforces 241]C. Mirror Box
[codeforces 241]C. Mirror Box 试题描述 Mirror Box is a name of a popular game in the Iranian National Am ...
- 算法设计与分析——多边形游戏(DP)
1.问题描述: 给定N个顶点的多边形,每个顶点标有一个整数,每条边上标有+(加)或是×(乘)号,并且N条边按照顺时针依次编号为1~N.下图给出了一个N=4个顶点的多边形. 游戏规则 :(1) 首先 ...
随机推荐
- Python 3.x pip安装报错ERROR: No matching distribution found for PIL
安装完成即可解决无法引入PIL的问题.
- DB2根据报错代码查看表与字段信息
select * from syscat.tables where tbspaceid='?' and tableid='?' select * from syscat.columns where t ...
- Android studio 运行程序出现两个apk的解决方案
保留主项目中的 intent-filter,将其他module中 AndroidManifest.xml文件的intent-filter的内容删除掉即可. 感恩:https://blog.csdn.n ...
- day37:MySQL基本操作
目录 part1:登录mysql的完整语法 part2:查询用户/设置密码/去除密码 part3:给ip/网段/所有ip设置账号密码 part4:查看权限 part5:添加权限/删除权限/删除用户 p ...
- 【Flutter 实战】自定义动画-涟漪和雷达扫描
老孟导读:此篇文章是 Flutter 动画系列文章第五篇,本文介绍2个自定义动画:涟漪和雷达扫描效果. 涟漪 实现涟漪动画效果如下: 此动画通过 CustomPainter 绘制配合 Animatio ...
- 基于python tkinter的课堂点名小程序
import datetime import json import os import random import tkinter as tk import openpyxl # 花名册文件名很多人 ...
- 如何使用Xdebug单步调试PHP游戏服务器
参考文章:https://www.sourcetoad.com/resources/debugging-php-save-time-with-xdebugs-remote-autostart/ 配置参 ...
- python文件操作、查看路径、查看文件名
1 # -*- coding: utf-8 -* # from sys import argv # script,input_file = argv import os file_url = &quo ...
- 【jmespath】—1. 基础用法
一.jsonpath 之前我写接口自动化测试时候,对于复杂的json返回,会使用jsonpath这个第三方库,就像写xpath一样,方便的查询json元素. 因为之前写WEB自动化时候,总用xpath ...
- 【HttpRunner v3.x】笔记 ——4. 测试用例-结构解析
一.官方首推pytest格式 上篇文章我们知道了,httprunner可以支持三种格式的用例,分别是pytest.yaml和json.yaml和json是以前的版本所使用的用例格式,但是在3.x版本上 ...