1、传教士(bishop)

问题描述:

panzhili王国的疆土恰好是一个矩形,为了管理方便,国王jjs将整个疆土划分成N*M块大小相同的区域。由于jjs希望他的子民也能信教爱教(”打拳”神教),所以他想安排一些传教士到全国各地去传教。但这些传教士的传教形式非常怪异,他们只在自己据点周围特定的区域内传教且领地意识极其强烈(即任意一个传教士的据点都不能在其他传教士的传教区域内,否则就会发生冲突)。现在我们知道传教士的传教区域为以其据点为中心的两条斜对角线上(如图)。现在jjs请你帮忙找出一个合理的安置方案,使得可以在全国范围内安置尽可能多的传教士而又不至于任意两个传教士会发生冲突。

(若A为某传教士的据点,则其传教范围为所有标有X的格子。为不产生冲突,则第二个传教士的据点只能放在上图的空格中。)

输入数据

输入文件共一行,包含两个整数N和M,代表国土的大小,n为水平区域数,m为垂直区域数。

输出数据

输出文件仅一行,包含一个整数,即最多可以安置的传教士的数目。

样例输入bishop.in

3  4

样例输出bishop.out

6

说明:样例安置方案如下图所示,X表示为某传教士的据点。

XXX

OOO

OOO

XXX

对于100%的数据,1<=n,m<=9,且数据规模呈梯度上升。


类似八皇后

对角线一条一条斜着搜索即可

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int N=;
inline int read(){
char c=getchar();int x=,f=;
while(c<''||c>''){if(c=='-')f=-;c=getchar();}
while(c>=''&&c<=''){x=x*+c-'';c=getchar();}
return x*f;
}
int n,m,ans=;
int vis[],shift=;
void dfs(int d){
ans=max(ans,d-);
if(d>m+n) return;
for(int x=;x<=d-;x++){
int y=d-x;
if(x<||x>n||y<||y>m) continue;
//printf("dfs %d %d %d\n",d,x,y);
if(vis[x-y+shift]) continue;
vis[x-y+shift]=;
dfs(d+);
vis[x-y+shift]=;
}
} int main(){
freopen("bishop.in","r",stdin);
freopen("bishop.out","w",stdout);
n=read();m=read();
dfs();
printf("%d",ans);
}



2czy把妹(czybm)

Czy是个大丧失,非常喜欢bm。他经常挑战bm的极限,同时b很多的mz。(虽然也许质量不容乐观)

这一天,czy又开始了他的极限挑战。在一个数轴上有n个maze,她们都在等待着czy的到来。Czy一开始站在k号妹子的旁边,他需要搞定所有的妹子(由于他向fewdan学会了绝技,所以搞定妹子的时间是无限接近于0的,也就是一瞬间就搞定而不用花额外的时间)。Maze们都很没有耐心,每让她们多等1s,她们就会增加w[i]的不开心值。现在,czy从k号妹子这里出发,以1m/s的速度开始行动,他希望在搞定所有maze的情况下使得她们的不开心值总和最小,于是他找到了即将在NOIP2014 AK的你来帮他解决这个问题。

文件输入:

输入文件的第一行包含一个整数N,2<=N<=1000,表示maze的数量。
第二行包含一个整数V,1<=V<=N,表示开始时czy站在几号maze的旁边.接下来的N行中,每行包含两个用空格隔开的整数D和W,用来描述每个maze,其中0<=D<=1000,0<=W<=1000。D表示MM在数轴上的位置(单位: m),W表示每秒钟会增加的不开心值。

文件输出:

一个整数,最小的不开心值。(答案不超过10^9)

样例输入

4

3

2 2

5 8

6 1

8 7

样例输出

56

对于40%的数据,1<=n<=7

对于100%的数据,1<=n<=1000 0<=D<=1000 0<=w<=1000


想了各种DP和图论模型.......哎

最后搜索加剪枝骗了60分

PS:搜索时注意在那里cnt++和vis[x]=1/0

正解就是区间DP,差一点想出来了,代价计算时有问题

f[i][j][0/1]表示i到j完成,在左或在右

转移考虑从那里走来,以外的都要贡献w*t的代价,预处理前缀和

//搜索
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int N=,INF=1e9;
inline int read(){
char c=getchar();int x=,f=;
while(c<''||c>''){if(c=='-')f=-;c=getchar();}
while(c>=''&&c<=''){x=x*+c-'';c=getchar();}
return x*f;
}
int n,s,a[N],w[N],vis[N],cnt=,ans=1e9;
void dfs(int x,int t,int val){//printf("dfs %d %d %d\n",x,t,val);
cnt++;vis[x]=;
if(cnt==n){ans=min(ans,val);return;}
int i;
for(i=x+;i<=n;i++) if(!vis[i]) break;
if(i<=n){
int tt=t+(a[i]-a[x]);
dfs(i,tt,val+tt*w[i]);
cnt--;vis[i]=;
}
for(i=x-;i>=;i--) if(!vis[i]) break;//printf("vis %d hi2 %d %d\n",vis[1],x,i);
if(i>=){
int tt=t+(a[x]-a[i]);
dfs(i,tt,val+tt*w[i]);
cnt--;vis[i]=;
}
}
int main(){
freopen("czybm.in","r",stdin);
freopen("czybm.out","w",stdout);
n=read();
s=read();
for(int i=;i<=n;i++){a[i]=read();w[i]=read();}
dfs(s,,);
printf("%d",ans);
}
//区间DP
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
using namespace std;
const int N=;
inline int read(){
char c=getchar();int x=,f=;
while(c<''||c>''){if(c=='-')f=-;c=getchar();}
while(c>=''&&c<=''){x=x*+c-'';c=getchar();}
return x*f;
}
int n,st,a[N],w[N],s[N];
int f[N][N][];
inline int sum(int i,int j){return s[j]-s[i-];}
void dp(){
for(int i=;i<=n;i++) f[i][i][]=f[i][i][]=abs(a[i]-a[st])*s[n];
for(int l=;l<=n;l++)
for(int i=;i<=n;i++){
int j=i+l-;
if(j>n) break;
f[i][j][]=min(f[i+][j][]+(a[i+]-a[i])*(sum(j+,n)+sum(,i)),
f[i][j-][]+(a[j]-a[j-])*(sum(j,n)+sum(,i-))
+(a[j]-a[i])*(sum(,i-)+sum(j+,n)) );
f[i][j][]=min(f[i][j-][]+(a[j]-a[j-])*(sum(j,n)+sum(,i-)),
f[i+][j][]+(a[i+]-a[i])*(sum(,i)+sum(j+,n))
+(a[j]-a[i])*(sum(,i-)+sum(j+,n)) );
}
}
int main(){
//freopen("czybm.in","r",stdin);
//freopen("czybm.out","w",stdout);
n=read();
st=read();
for(int i=;i<=n;i++){
a[i]=read();w[i]=read();
s[i]=s[i-]+w[i];printf("n %d\n",i);
}
dp();
printf("%d",min(f[][n][],f[][n][]));
}

NOIP模拟赛20161016R1的更多相关文章

  1. NOIP模拟赛20161022

    NOIP模拟赛2016-10-22 题目名 东风谷早苗 西行寺幽幽子 琪露诺 上白泽慧音 源文件 robot.cpp/c/pas spring.cpp/c/pas iceroad.cpp/c/pas ...

  2. contesthunter暑假NOIP模拟赛第一场题解

    contesthunter暑假NOIP模拟赛#1题解: 第一题:杯具大派送 水题.枚举A,B的公约数即可. #include <algorithm> #include <cmath& ...

  3. NOIP模拟赛 by hzwer

    2015年10月04日NOIP模拟赛 by hzwer    (这是小奇=> 小奇挖矿2(mining) [题目背景] 小奇飞船的钻头开启了无限耐久+精准采集模式!这次它要将原矿运到泛光之源的矿 ...

  4. 大家AK杯 灰天飞雁NOIP模拟赛题解/数据/标程

    数据 http://files.cnblogs.com/htfy/data.zip 简要题解 桌球碰撞 纯模拟,注意一开始就在袋口和v=0的情况.v和坐标可以是小数.为保险起见最好用extended/ ...

  5. 队爷的讲学计划 CH Round #59 - OrzCC杯NOIP模拟赛day1

    题目:http://ch.ezoj.tk/contest/CH%20Round%20%2359%20-%20OrzCC杯NOIP模拟赛day1/队爷的讲学计划 题解:刚开始理解题意理解了好半天,然后发 ...

  6. 队爷的Au Plan CH Round #59 - OrzCC杯NOIP模拟赛day1

    题目:http://ch.ezoj.tk/contest/CH%20Round%20%2359%20-%20OrzCC杯NOIP模拟赛day1/队爷的Au%20Plan 题解:看了题之后觉得肯定是DP ...

  7. 队爷的新书 CH Round #59 - OrzCC杯NOIP模拟赛day1

    题目:http://ch.ezoj.tk/contest/CH%20Round%20%2359%20-%20OrzCC杯NOIP模拟赛day1/队爷的新书 题解:看到这题就想到了 poetize 的封 ...

  8. CH Round #58 - OrzCC杯noip模拟赛day2

    A:颜色问题 题目:http://ch.ezoj.tk/contest/CH%20Round%20%2358%20-%20OrzCC杯noip模拟赛day2/颜色问题 题解:算一下每个仆人到它的目的地 ...

  9. CH Round #52 - Thinking Bear #1 (NOIP模拟赛)

    A.拆地毯 题目:http://www.contesthunter.org/contest/CH%20Round%20%2352%20-%20Thinking%20Bear%20%231%20(NOI ...

随机推荐

  1. C#基础-压缩文件及故障排除

    C#压缩文件可以使用第三方dll库:ICSharpCode.SharpZipLib.dll: 以下代码能实现文件夹与多个文件的同时压缩.(例:把三个文件夹和五个文件一起压缩成一个zip) 直接上代码, ...

  2. Windows 7 Python 3.5 及 django 1.8 的安装

    本文参考:http://www.runoob.com/django/django-first-app.html 1.下载 安装 python 3.5 可以自定义安装位置 ,勾选设置环境变量Path 默 ...

  3. java timer 执行任务

    1. 建立timer import java.util.Timer; import java.util.TimerTask; public class Start { public class Sta ...

  4. Hadoop之HDFS文件读写过程

    一.HDFS读过程 1.1 HDFS API 读文件 Configuration conf = new Configuration(); FileSystem fs = FileSystem.get( ...

  5. 云巴:基于MQTT协议的实时通信编程模型

    概要 有人常问,云巴实时通信系统到底提供了一种怎样的服务,与其他提供推送或 IM 服务的厂商有何本质区别.其实,从技术角度分析,云巴与其它同类厂商都是面向开发者的通信服务,宏观的编程模型都是大同小异, ...

  6. android px,dp,sp大小转换工具

    package com.voole.playerlib.util; import android.content.Context; /** * Android大小单位转换工具类<br/> ...

  7. JavaScript高阶函数

    所谓高阶函数(higher-order function) 就是操作函数的函数,它接收一个或多个函数作为参数,并返回一个新函数. 下面的例子接收两个函数f()和g(),并返回一个新的函数用以计算f(g ...

  8. 关于Lind.DDD.Api客户端的使用与知识分享

    回到目录 关于Lind.DDD.Api的使用与客户端的调用 作者:张占岭 花名:仓储大叔 框架:Lind.DDD,Lind.DDD.Api 目录 Api里注册全局校验特性 1 Api中设置全局的Cor ...

  9. java web学习总结(十七) -------------------过滤器

    一.Filter简介 Filter也称之为过滤器,它是Servlet技术中最激动人心的技术,WEB开发人员通过Filter技术,对web服务器管理的所有web资源:例如Jsp, Servlet, 静态 ...

  10. B树、B+树的实现

    B树的定义 假设B树的度为t(t>=2),则B树满足如下要求:(参考算法导论) (1)  每个非根节点至少包含t-1个关键字,t个指向子节点的指针:至多包含2t-1个关键字,2t个指向子女的指针 ...