传送门

分析

首先不难想到O(k)做法,即dpi表示进行了几次,但复杂度明显爆炸,所以思考更优做法。我们发现数字个数很小,仅为可怜的50,所以从这里找突破口。我们发现每次可以在一个固定区域内进行刷分活动,当分数可以安全渡过中间的负数时可以选择渡过负数到另一个刷分区刷分,也可以留在本来的区域继续刷分,得到这些之后我们便可以考虑如何求出刷分区了,我们不难想出以点i为结尾的刷分区肯定是i的最大后缀和,得到以上结论后我们就可以dp了,当然这个题也可以建图跑最短路,代码挺容易理解了,具体实现看代码吧。

代码

dp

#include<iostream>
#include<cstdio>
#include<cstring>
#include<string>
#include<algorithm>
#include<cctype>
#include<cmath>
#include<cstdlib>
#include<queue>
#include<ctime>
#include<vector>
#include<set>
#include<map>
#include<stack>
using namespace std;
#define sp cout<<"---------------------------------------------------"<<endl;
#define li long long
li num[],vl[],pre[],a[];
class RowGame{
public:
li score(vector<int>board,int k){
int i,j,n=board.size();
pre[]=board[];
for(i=;i<n;i++)
pre[i]=(li)board[i]+pre[i-];
for(i=;i<n;i++)
if(pre[i]>=){
num[i]=k-;
vl[i]=pre[i];
}
a[]=board[];
for(i=;i<n;i++){
a[i]=board[i];
if(a[i-]>)
a[i]+=a[i-];
}
li ans=;
for(i=;i<n;i++)
if(num[i]&&a[i]>){
ans=max(ans,vl[i]+num[i]*a[i]);
li v=a[i]*;
for(j=i+;j<n;j++){
li x=num[i]-,y=vl[i]+v+pre[j]-pre[i];
if(y<){
li t=(-y-)/v+;
x-=t*;
y+=t*v;
}
if(x>num[j]||(x==num[j]&&y>vl[j])){
num[j]=x;
vl[j]=y;
}
}
}
return ans;
}
};

建图+最短路

#include<iostream>
#include<cstdio>
#include<cstring>
#include<string>
#include<algorithm>
#include<cctype>
#include<cmath>
#include<cstdlib>
#include<queue>
#include<ctime>
#include<vector>
#include<set>
#include<map>
#include<stack>
using namespace std;
#define sp cout<<"---------------------------------------------------"<<endl;
#define li long long
int n,n2;
li g[][],a[],step[],vl[];
const li inf=1e16+;
class RowGame{
public:
li score(vector<int>board,int k){
int i,j,n=board.size(),n2=n+n;
for(i=;i<n2;i++)
for(j=;j<n2;j++)
g[i][j]=-inf;
for(i=;i<n;i++){
li s=;
for(j=i;j<n;j++){
s+=board[j];
g[i][j+n]=g[j+n][i]=s;
}
}
for(i=;i<n2;i++){
a[i]=;
for(j=;j<n2;j++)
a[i]=max(a[i],g[i][j]+g[j][i]);
}
for(i=;i<n2;i++){
step[i]=inf;
vl[i]=-inf;
}
step[]=vl[]=;
for(int p=;p<n2;p++){
for(i=;i<n2;i++)
if(step[i]!=inf)
for(j=;j<n2;j++)
if(g[i][j]!=-inf){
li s=step[i],v=vl[i];
if(v+g[i][j]<){
if(a[i]<=)continue;
li ss=(-(v+g[i][j])-)/a[i]+;
s+=ss*;
v+=ss*a[i];
}
v+=g[i][j];
s++;
if(s<step[j]||(s==step[j]&&v>vl[j])){
step[j]=s;
vl[j]=v;
}
}
}
li res=;
for(i=;i<n2;i++)
if(step[i]<=k){
res=max(res,vl[i]);
res=max(res,vl[i]+(k-step[i])/*a[i]);
if(step[i]!=k)
for(j=;j<n2;j++)
if(g[i][j]!=-inf)
res=max(res,vl[i]+(k-step[i]-)/*a[i]+g[i][j]);
}
return res;
}
};

RowGame TopCoder - 10664的更多相关文章

  1. TopCoder kawigiEdit插件配置

    kawigiEdit插件可以提高 TopCoder编译,提交效率,可以管理保存每次SRM的代码. kawigiEdit下载地址:http://code.google.com/p/kawigiedit/ ...

  2. 记第一次TopCoder, 练习SRM 583 div2 250

    今天第一次做topcoder,没有比赛,所以找的最新一期的SRM练习,做了第一道题. 题目大意是说 给一个数字字符串,任意交换两位,使数字变为最小,不能有前导0. 看到题目以后,先想到的找规律,发现要 ...

  3. TopCoder比赛总结表

    TopCoder                        250                              500                                 ...

  4. Topcoder几例C++字符串应用

    本文写于9月初,是利用Topcoder准备应聘时的机试环节临时补习的C++的一部分内容.签约之后,没有再进行练习,此文暂告一段落. 换句话说,就是本文太监了,一直做草稿看着别扭,删掉又觉得可惜,索性发 ...

  5. TopCoder

    在TopCoder下载好luncher,网址:https://www.topcoder.com/community/competitive%20programming/ 选择launch web ar ...

  6. TopCoder SRM 596 DIV 1 250

    body { font-family: Monospaced; font-size: 12pt } pre { font-family: Monospaced; font-size: 12pt } P ...

  7. 求拓扑排序的数量,例题 topcoder srm 654 div2 500

    周赛时遇到的一道比较有意思的题目: Problem Statement      There are N rooms in Maki's new house. The rooms are number ...

  8. TopCoder SRM 590

     第一次做TC,不太习惯,各种调试,只做了一题...... Problem Statement     Fox Ciel is going to play Gomoku with her friend ...

  9. Topcoder Arena插件配置和训练指南

    一. Arena插件配置 1. 下载Arena 指针:http://community.topcoder.com/tc?module=MyHome 左边Competitions->Algorit ...

随机推荐

  1. PHP中获取文件扩展名的N种方法

    PHP中获取文件扩展名的N种方法 从网上收罗的,基本上就以下这几种方式: 第1种方法:function get_extension($file){substr(strrchr($file, '.'), ...

  2. HDU4940 Destroy Transportation system(有上下界的最大流)

    Problem Description Tom is a commander, his task is destroying his enemy’s transportation system. Le ...

  3. [BZOJ5249][多省联测2018]IIIDX

    bzoj luogu sol 首先可以把依赖关系转成一个森林.自下而上维护出每个点的\(size\),表示这关解锁以后一共有多少关. 考虑没有重复数字的情况. 直接从小往大贪心把每个数赋给当前已解锁的 ...

  4. LeetCode Valid Palindrome II

    原题链接在这里:https://leetcode.com/problems/valid-palindrome-ii/description/ 题目: Given a non-empty string  ...

  5. 洛谷【P1886】滑动窗口

    浅谈队列:https://www.cnblogs.com/AKMer/p/10314965.html 题目传送门:https://www.luogu.org/problemnew/show/P1886 ...

  6. Python:函数变量的使用

    1.上层函数不能直接使用其嵌套函数的变量: def func1(x, y): z = x + y def func2(): m = 3 z += m return z print(func1(1, 2 ...

  7. 查看,修改ceph节点的ceph配置命令

    标签(空格分隔): ceph,ceph运维,ceph配置 查看ceph配置 1. 查看ceph默认配置: # ceph --show-config 2. 查看 type.num 的ceph默认配置: ...

  8. 线程安全(1)--demo1

    成员变量的类用于多线程时是不安全的,不安全体现在这个成员变量可能发生非原子性的操作,而变量定义在方法内也就是局部变量是线程安全的.想想在使用struts1时,不推荐创建成员变量,因为action是单例 ...

  9. 本地测试html文件时CSS效果显示, 但是当django的服务器上运行时效果不显示

    本地测试时各种效果都显示, 但是当在django服务器上测试时, 效果却不显示, 原因是我将css文件放在一个static文件夹里, 没有在settings中设置static_dir选项.将stati ...

  10. PDM后续处理-驼峰规则、清除约束、外键改名

    Option   Explicit ValidationMode   =   True InteractiveMode =   im_Batch Dim   mdl   '当前model '获取当前活 ...