链接

A.Anan的派对

题意:Anan想举办一个派对。Anan的朋友总共有 n 人。第i个人如果参加派对会得到 \(c_i\) 的快乐值,除他自己外每多一个人参加他会减少 \(d_i\) 的快乐值。Anan想让这个派对的总快乐值尽可能大,在这个基础上,能来的人越多越好。Anan想知道最佳的邀请方案的快乐值与参加人数。对于 \(50\%\) 的数据 , $n\le 1000 $

假设来的人的集合为 \(S\),则快乐值为 \(\sum_{i\in S}c_i-(|S|-1)\times d_i\)

枚举集合大小,然后排序选前 \(|S|\) 个即可

#include<stdio.h>
#include<algorithm>
#define REP(i,a,b) for(int i(a);i<=(b);++i)
struct node{
int c,d;
}a[1002];
int n,cnt;
long long ans=-1e18,r;
int main(){
scanf("%d",&n);
REP(i,1,n)scanf("%d",&a[i].c);
REP(i,1,n)scanf("%d",&a[i].d);
REP(t,1,n){
std::sort(a+1,a+1+n,[&](const node&a,const node&b){return a.c-1ll*a.d*(t-1)>b.c-1ll*b.d*(t-1);});
r=0;
REP(i,1,t)r+=a[i].c-1ll*a[i].d*(t-1);
if(r>=ans)ans=r,cnt=t;
}
printf("%lld\n%d\n",ans,cnt);
return 0;
}

B.XYG的蛋糕

题意:一个 \(n\times m\) 的矩形,需要把它分成 \(1\times 1\) 的小块,每次选出已经分出的某一个矩形,切一刀,可以横切或竖切。求方案数,两个切法不同当且仅当其中一个切法中存在一条刀痕,在另一个切法中不存在。 \(n,m\le 300\)

考虑DP,设 \(dp[i][j]\) 表示大小为 \(i\times j\) 的矩形的方案数,第一反应是

\(dp[i][j]=\sum_x dp[x][j]\times dp[i-x][j]+\sum_ydp[i][y]\times dp[i][j-y]\)

但是这样有重复

增加一维 \(k\) 表示允不允许横切或竖切即可

#include<stdio.h>
#include<cstring>
#define REP(i,a,b) for(int i(a);i<=(b);++i)
const int p=998244353;
int f[305][305][3];
inline int dfs(int x,int y,int z){
if(x==1&&y==1)return 1;
int&ans=f[x][y][z];
if(~ans)return ans;
ans=0;
if(z!=1)REP(i,1,x-1)ans=(ans+1ll*dfs(i,y,1)*dfs(x-i,y,0))%p;
if(z!=2)REP(i,1,y-1)ans=(ans+1ll*dfs(x,i,2)*dfs(x,y-i,0))%p;
return ans;
}
int main(){
memset(f,-1,sizeof f);
int n,m;scanf("%d%d",&n,&m);
printf("%d\n",dfs(n,m,0));
return 0;
}

C.WZD的洞洞

题意:平面上有n个物品,每个物品有坐标xi,yi和价值wi,WZD希望用洞洞包含住价值尽可能高的物品。由于洞洞的构造,其两条边必须平行于坐标轴,且直角在左下方(也就是说,洞洞只能平行移动),并且要求直角必须恰好落在一个物品上。求洞洞能包含住最大价值为多少的物品。n≤100000,0<xi,yi≤10000,-10000<wi<10000。

这个直角三角形只能平行移动,这意味着它的斜边的斜率是不变的,而且题目要求直角顶点一定在一个物品上,所以如果用斜率为斜边的斜率的直线扫,顶点在一个物品上的三角形能包含另外一个物品的条件是他们在这个直线间的距离小于三角形的高,因此two pointers搞一下,树状数组维护一下即可

#include<stdio.h>
#include<cmath>
#include<algorithm>
#define REP(i,a,b) for(int i(a);i<=(b);++i)
const int N=1e5+5,S=10005;
struct BIT{
int c[S],n;
inline void add(int p,int x){for(;p<=n;p+=p&-p)c[p]+=x;}
inline int ask(int p){int r=0;for(;p;p-=p&-p)r+=c[p];return r;}
}tx,ty;
int n,A,B;
struct node{int x,y,w;double d;}a[N];
inline void smax(int&x,const int&y){x<y?x=y:0;}
int main(){
scanf("%d%d%d",&n,&A,&B);
const double base=sqrt(A*A+B*B),maxd=A*B/base;
REP(i,1,n){
scanf("%d%d%d",&a[i].x,&a[i].y,&a[i].w);
a[i].d=(double)(B*a[i].x+A*a[i].y)/base;
smax(tx.n,a[i].x),smax(ty.n,a[i].y);
}
std::sort(a+1,a+1+n,[&](const node&a,const node&b){return a.d>b.d;});
int l=1,sum=0,ans=0;
REP(r,1,n){
sum+=a[r].w;
while(l<r&&a[l].d-a[r].d>maxd){
tx.add(a[l].x,-a[l].w),ty.add(a[l].y,-a[l].w);
sum-=a[l++].w;
}
tx.add(a[r].x,a[r].w),ty.add(a[r].y,a[r].w);
smax(ans,sum-tx.ask(a[r].x-1)-ty.ask(a[r].y-1));
}
printf("%d\n",ans);
return 0;
}

[51Nod]NOIP2018提高组省一冲奖班模测训练(三) 题解的更多相关文章

  1. [51Nod]NOIP2018提高组省一冲奖班模测训练(二)

    http://www.51nod.com/contest/problemList.html#!contestId=73&randomCode=4408520896354389006 还是原题大 ...

  2. [51Nod]NOIP2018提高组省一冲奖班模测训练(一)题解

    http://www.51nod.com/contest/problemList.html#!contestId=72&randomCode=147206 原题水题大赛.. A.珂朵莉的旅行 ...

  3. [51Nod]NOIP2018提高组省一冲奖班模测训练(四)翻车记+题解

    链接 下午5点的时候,突然想起来有这个比赛,看看还有一个小时,打算来AK一下,结果因为最近智商越来越低,翻车了,我还是太菜了.上来10分钟先切掉了C和A,结果卡在了B题,唉. A.砍树 一眼题,两遍树 ...

  4. NOIP2018提高组省一冲奖班模测训练(六)

    NOIP2018提高组省一冲奖班模测训练(六) https://www.51nod.com/Contest/ContestDescription.html#!#contestId=80 20分钟AC掉 ...

  5. NOIP2018提高组省一冲奖班模测训练(五)

    NOIP2018提高组省一冲奖班模测训练(五) http://www.51nod.com/Contest/ContestDescription.html#!#contestId=79 今天有点浪…… ...

  6. NOIP2018提高组省一冲奖班模测训练(四)

    NOIP2018提高组省一冲奖班模测训练(四) 这次比赛只AC了第一题,而且花了40多分钟,貌似是A掉第一题里面最晚的 而且还有一个半小时我就放弃了…… 下次即使想不出也要坚持到最后 第二题没思路 第 ...

  7. NOIP2018提高组省一冲奖班模测训练(三)

    NOIP2018提高组省一冲奖班模测训练(三) 自己按照noip的方式考,只在最后一两分钟交了一次 第一题过了,对拍拍到尾. 第二题不会.考试时往组合计数的方向想,推公式,推了一个多小时,大脑爆炸,还 ...

  8. NOIP2018提高组省一冲奖班模测训练(二)

    比赛链接 NOIP2018提高组省一冲奖班模测训练(二) 今天发挥正常,昨天不在状态…… 花了很久A了第一题 第二题打了30分暴力 第三题投机取巧输出test1答案(连暴力都不知道怎么打,太弱了) 2 ...

  9. NOIP2018提高组省一冲奖班模测训练(一)

    比赛链接 https://www.51nod.com/contest/problemList.html#!contestId=72&randomCode=147206 这次考试的题非常有质量 ...

随机推荐

  1. 【DNN引用包】

    <%@ Register TagPrefix="dnn" TagName="address" Src="~/controls/address.a ...

  2. Android 自定义的开关按钮——SwitchButton

    本文转自:http://blog.csdn.net/swust_chenpeng/article/details/19967501 我将原文的控件进行了一些修改,去掉了原来控件的外边框,只留下重要的遮 ...

  3. MySql语句中select可以嵌套么,字段的重命名可以用中文么

    今天文档中看到的查询语句,SELECT后面又跟了一个SELECT嵌套,而且把字段重命名为中文,请问可以这样做么 MySql语句中select可以嵌套么,字段的重命名可以用中文么 >> my ...

  4. 织梦CMS调用文章第一张图片(非缩略图)终极方法

    之前,网上流传了很多在织梦CMS中调用第一张图片的方法,但大体都一样.即删除缩略图字符串,并添加后缀.然而这种方法仅限于jpg图片或其他单独图片类的调用.如果一个站有png.JPG.gif等多种格式. ...

  5. c# 枚举enum

    1 定义枚举 enum Days { Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday }; 默认情况下,枚举中的每个元素的 ...

  6. POJ 2251 Dungeon Master【BFS】

    题意:给出一个三维坐标的牢,给出起点st,给出终点en,问能够在多少秒内逃出. 学习的第一题三维的广搜@_@ 过程和二维的一样,只是搜索方向可以有6个方向(x,y,z的正半轴,负半轴) 另外这一题的输 ...

  7. Out-of-Process iframes (OOPIFs)

    For Developers‎ > ‎Design Documents‎ > ‎ Out-of-Process iframes (OOPIFs) This page provides an ...

  8. javascript--记忆函数

    function memory(val) { if(!memory.cached) {//判断是否创建了缓存 memory.cached = {}; } if(memory.cached[val] ! ...

  9. Vue总结(二)

    原始引用:开发时使用开发版本,线上使用生产版本. 原始引用到html中,在浏览器中控制台输入Vue,输出一个函数就可以. defineProperties实现的数据绑定. //defineProper ...

  10. TIME定时器

    一.定时器分类 STM32F1 系列中,除了互联型的产品,共有 8 个定时器,分为基本定时器,通用定时器和高级定时器.基本定时器 TIM6 和 TIM7 是一个 16 位的只能向上计数的定时器,只能定 ...