NOIP模拟赛20161016R1
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);
}
2、czy把妹(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的更多相关文章
- NOIP模拟赛20161022
NOIP模拟赛2016-10-22 题目名 东风谷早苗 西行寺幽幽子 琪露诺 上白泽慧音 源文件 robot.cpp/c/pas spring.cpp/c/pas iceroad.cpp/c/pas ...
- contesthunter暑假NOIP模拟赛第一场题解
contesthunter暑假NOIP模拟赛#1题解: 第一题:杯具大派送 水题.枚举A,B的公约数即可. #include <algorithm> #include <cmath& ...
- NOIP模拟赛 by hzwer
2015年10月04日NOIP模拟赛 by hzwer (这是小奇=> 小奇挖矿2(mining) [题目背景] 小奇飞船的钻头开启了无限耐久+精准采集模式!这次它要将原矿运到泛光之源的矿 ...
- 大家AK杯 灰天飞雁NOIP模拟赛题解/数据/标程
数据 http://files.cnblogs.com/htfy/data.zip 简要题解 桌球碰撞 纯模拟,注意一开始就在袋口和v=0的情况.v和坐标可以是小数.为保险起见最好用extended/ ...
- 队爷的讲学计划 CH Round #59 - OrzCC杯NOIP模拟赛day1
题目:http://ch.ezoj.tk/contest/CH%20Round%20%2359%20-%20OrzCC杯NOIP模拟赛day1/队爷的讲学计划 题解:刚开始理解题意理解了好半天,然后发 ...
- 队爷的Au Plan CH Round #59 - OrzCC杯NOIP模拟赛day1
题目:http://ch.ezoj.tk/contest/CH%20Round%20%2359%20-%20OrzCC杯NOIP模拟赛day1/队爷的Au%20Plan 题解:看了题之后觉得肯定是DP ...
- 队爷的新书 CH Round #59 - OrzCC杯NOIP模拟赛day1
题目:http://ch.ezoj.tk/contest/CH%20Round%20%2359%20-%20OrzCC杯NOIP模拟赛day1/队爷的新书 题解:看到这题就想到了 poetize 的封 ...
- CH Round #58 - OrzCC杯noip模拟赛day2
A:颜色问题 题目:http://ch.ezoj.tk/contest/CH%20Round%20%2358%20-%20OrzCC杯noip模拟赛day2/颜色问题 题解:算一下每个仆人到它的目的地 ...
- CH Round #52 - Thinking Bear #1 (NOIP模拟赛)
A.拆地毯 题目:http://www.contesthunter.org/contest/CH%20Round%20%2352%20-%20Thinking%20Bear%20%231%20(NOI ...
随机推荐
- xp IP安全策略 ipseccmd
///下载 ipseccmd.exe //禁止 xp 连接 public static void BannedXPRunCmd() { string str = Console.ReadLine(); ...
- AJAX与PHP(PHP笔记)--动态验证用户名
在PHP基础的学习过程中经常会遇到对页面的局部刷新. 比如说,我们在填写用户名的同时,对数据库中的信息进行验证,检查是否充分. 这时就要用到AJAX实现页面的动态加载. 下面例子是简单的PHP与AJA ...
- No.006:ZigZag Conversion
问题: The string "PAYPALISHIRING" is written in a zigzag pattern on a given number of rows l ...
- jQuery:年月日三级联动
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default3.aspx.cs ...
- Ext.Net MVC 配置(2)
在VS2012中使用NuGet类库管理器配置EXT.NET MVC环境在“Ext.Net MVC 配置(1)”文章已经写到,方法很简单也很方便,但就是不知道它在安装这些库时对项目做了什么很不爽. 通过 ...
- 深入理解和应用display属性(一)
Display在官方定义:规定元素应该生成的框的类型.本文只重点分析常用的6个值:none.block.inline.inline-block.inherit.flex.其他table.list-it ...
- [deviceone开发]-一个简单的表单示例
一.简介 这个例子我们用do_ScrollView+do_LinearLayout来实现,当没有输入相关的值而去保存的时候,则把隐藏的几个提示Label显示出来,然后调用do_LinearLayout ...
- 通过API执行AutoCAD命令来…
大家知道AutoCAD功能丰富,而更可贵的是,这么多丰富的功能背后都有一个命令,有些东西,直接用API调用写起来可能很费劲或者无法实现,可如果能用命令的话却很简单,这时候我们就可以通过API来调用Au ...
- iOS之设置头像(访问系统相册、本地上传)
1. UIActionSheet *actionSheet = [[UIActionSheet alloc] initWithTitle: ...
- Android中的AlertDialog使用示例一(警告对话框)
在Android开发中,我们经常会需要在Android界面上弹出一些对话框,比如询问用户或者让用户选择.这些功能我们叫它Android Dialog对话框,AlertDialog实现方法为建造者模式. ...