【58测试】【贪心】【离散】【搜索】【LIS】【dp】
第一题 大天使之剑 大意:
有n个怪,每个怪的ph 为 h[i],有三种攻击方式,普通攻击:一次打一个怪一滴血;重击(消耗1魔法值):一次打一个怪两滴血;群体攻击(消耗1魔法值):一次打所有怪一滴血。你有无数血,m个魔法值,每攻击一次怪后,还存活的所有怪会各攻击你一滴血。问你打完所有怪你最少被打了多少滴血。
解:
看到这道题,首先想到的是搜索,一种一种的搜,把所有情况都搜出来找最小。在草稿纸上再列一些数据就会发现,其实是个贪心。在有魔法值的时候,尽量全用于群体攻击更划算,然后没有了就普通攻击。那重击呢?由于我的数据比较特殊,所以我判重击的条件是还剩两个偶数滴血的怪,但其实,不管它的血量是偶数还是奇数,重击都更划算。还有一些杂七杂八的减没减过sum的问题等,让我调试了一个下午。看来以后静态查错很重要,少犯小错误。代码写得丑。
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#define maxn 100005
#define ll long long
using namespace std;
ll n,m,ph[maxn],ans,sum,cur=;
bool jian[maxn];
void print()
{
printf("%I64d",ans);
return ;
}
int main()
{
freopen("zhijian.in","r",stdin);
freopen("zhijian.out","w",stdout);
cin>>n>>m;
for (int i=;i<=n;i++)
scanf("%d",&ph[i]);
sort(ph+,ph++n);
while (m)
{
if (n-cur+<=){//改用重击
for (int i=cur;i<=n;i++)
if (!jian[i]) ph[i]-=sum;
while(m){
if (cur>n) {
print();return ;
}
if (ph[cur]<=){
ans+=n-cur;
cur++;continue;
}
ph[cur]-=;
ans+=n-cur+;
m--;
}
while (cur<=n){
if (ph[cur]){
int ci=ph[cur]-;
ans+=(n-cur+)*ci;
}
ans+=n-cur;
cur++;
}
print();
return ;
}
sum++;
ph[cur]--;int h=cur;
jian[cur]=true;
ans+=n-cur+;
while (ph[cur]<=){
ans--;
cur++;
ph[cur]-=sum;
jian[cur]=true;//判断
}
m--;
}
while (cur<=n){
if (!jian[cur]) ph[cur]-=sum;//直接减会多减
if (ph[cur]){
int ci=ph[cur]-;
ans+=(n-cur+)*ci;
}
ans+=n-cur;
cur++;
}
printf("%I64d",ans);
return ;
}
第二题 保卫萝卜 大意:
一个很大的矩阵,起点在正中心的方格。数据有向上下左右四个方向走的记录,输出走过的方格及所围的方格数。
解:
有两种大体思路。一个是直接正着算面积,还有反着算走不到的点。我用的后者。但有一个问题,就是存矩阵。我把它走过的地方的最左边上面下面和右边记录下来,然后在这个包含它走的所有路的方格中从0,0开始遍历dfs,到不了的地方vis=false,即为ans++。注意要在搜索范围中再加一圈,因为可能走过的路把这个范围隔开了,就搜索不到。但这是60分的做法,100分做法要用离散化坐标的思想,先放一下。
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#define maxn 2005
using namespace std;
const int zl[][]={{,,,-},{,-,,}};
int n,xi,yi,idx,sum,ans;
bool mp[maxn][maxn],vis[maxn][maxn];
int uup,don,le,ri,stx,sty;
struct pp{
int x,y;
};
pp tur[];
char c[];
void dfs(int xx,int yy)
{
for (int i=;i<=;i++)
{
int ki=xx+zl[][i],kj=yy+zl[][i];
if (ki>=&&kj>=&&ki<=ri&&kj<=uup&&!vis[ki][kj]&&!mp[ki][kj])
{
vis[ki][kj]=true;
sum++;dfs(ki,kj);
}
}
}
int main()
{
freopen("luobo.in","r",stdin);
freopen("luobo.out","w",stdout);
cin>>n;
getchar();
for (int i=;i<=n;i++)
{
c[i]=getchar();
getchar();int a;
scanf("%d",&a);
if (c[i]=='L') {stx-=a;if (stx<le) le=stx;}
else if (c[i]=='R'){stx+=a;if (stx>ri) ri=stx;}
else if (c[i]=='U') {sty+=a;if (sty>uup) uup=sty;}
else if (c[i]=='D'){sty-=a;if (sty<don) don=sty;}
tur[++idx].x=stx;tur[idx].y=sty;
getchar();
}
xi=-le+;yi=-don+;uup+=-don+;ri+=-le+;
mp[xi][yi]=true;
for (int i=;i<=idx;i++)
{
tur[i].x+=-le+;tur[i].y+=-don+;
int a=min(xi,tur[i].x),b=max(xi,tur[i].x),ci=min(yi,tur[i].y),d=max(yi,tur[i].y);
for (int j=a;j<=b;j++)
for (int k=ci;k<=d;k++)
mp[j][k]=true;
xi=tur[i].x;yi=tur[i].y;
}
dfs(,);
for (int i=;i<=ri;i++)
for (int j=;j<=uup;j++)
if (!vis[i][j]) ans++;
printf("%d",ans);
return ;
}
第三题 打地鼠 大意:
(没错怎么都是游戏的名字)打地鼠,打的这个地鼠的肥胖值一定要比上一个打的大。地鼠最多出现t次,问最多能打多少地鼠。
解:
看起来是个简单的最长上升序列。但是有一个t次,所以直接扫描加一个循环t就可以了,是不影响的。然后LIS 的nlogn的算法才能过这道题。具体的解释我觉得这个博客讲的就很清楚。http://blog.csdn.net/shuangde800/article/details/7474903
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#define maxn 100005
using namespace std;
int n,maxx,k,t,a[maxn],d[maxn],ans;
int main()
{
freopen("dishu.in","r",stdin);
freopen("dishu.out","w",stdout);
cin>>k>>n>>maxx>>t;
while (k--)
{
memset(d,,sizeof(d));
int idx;ans=;
for (int i=;i<=n;i++)
scanf("%d",&a[i]);
d[]=a[];ans=;
for(int i=;i<=t;i++)
for (int j=;j<=n;j++)
{
if (a[j]>d[ans]) d[++ans]=a[j];
else {
int pos=lower_bound(d+,d++ans,a[j])-d;//-d not -d-1 ?
d[pos]=a[j];
}
}
printf("%d\n",ans);
}
return ;
}
好好睡一觉,明天联考加油,不要有压力。
【58测试】【贪心】【离散】【搜索】【LIS】【dp】的更多相关文章
- 【阿里云产品公测】PTS压力测试WP站搜索
[阿里云产品公测]PTS压力测试WP站搜索 作者:阿里云用户cnsjw PTS性能测试服务是一个非常非常强大的压力测试工具.可以模拟百人同时访问网站的情况,并监测ECS和RDS的各项指标,生成非常详细 ...
- POJ 2533 Longest Ordered Subsequence (LIS DP)
最长公共自序列LIS 三种模板,但是邝斌写的好像这题过不了 N*N #include <iostream> #include <cstdio> #include <cst ...
- 记忆化搜索(DFS+DP) URAL 1223 Chernobyl’ Eagle on a Roof
题目传送门 /* 记忆化搜索(DFS+DP):dp[x][y] 表示x个蛋,在y楼扔后所需要的实验次数 ans = min (ans, max (dp[x][y-i], dp[x-1][i-1]) + ...
- 记忆化搜索(DFS+DP) URAL 1501 Sense of Beauty
题目传送门 /* 题意:给了两堆牌,每次从首部取出一张牌,按颜色分配到两个新堆,分配过程两新堆的总数差不大于1 记忆化搜索(DFS+DP):我们思考如果我们将连续的两个操作看成一个集体操作,那么这个操 ...
- 搜索+简单dp
前言:即使是简单的递归,在复杂度过高时也可以使用简单的dp. 一般有两种情况,一是利用dp思想求最优子结构进行搜索剪枝,二是利用搜索进行dp数组的填充. 例题一.hdu1978 题目大意:这是一个简单 ...
- UVa 10599【lis dp,记忆化搜索】
UVa 10599 题意: 给出r*c的网格,其中有些格子里面有垃圾,机器人从左上角移动到右下角,只能向右或向下移动.问机器人能清扫最多多少个含有垃圾的格子,有多少中方案,输出其中一种方案的格子编号. ...
- [CSP-S模拟测试]:二叉搜索树(DP+贪心)
题目传送门(内部题99) 输入格式 第一行一个整数$n$,第二行$n$个整数$x_1\sim x_n$. 输出格式 一行一个整数表示答案. 样例 样例输入: 58 2 1 4 3 样例输出: 数据范围 ...
- UVALive 4864 Bit Counting --记忆化搜索 / 数位DP?
题目链接: 题目链接 题意:如果一个数二进制n有k位1,那么f1[n] = k,如果k有s位二进制1,那么f2[n] = f1[k] = s. 如此往复,直到fx[n] = 1,此时的x就是n的”K ...
- hdu3555 Bomb (记忆化搜索 数位DP)
http://acm.hdu.edu.cn/showproblem.php?pid=3555 Bomb Time Limit: 2000/1000 MS (Java/Others) Memory ...
随机推荐
- 使用Scala实现Java项目的单词计数:串行及Actor版本
其实我想找一门“具有Python的简洁写法和融合Java平台的优势, 同时又足够有挑战性和灵活性”的编程语言. Scala 就是一个不错的选择. Scala 有很多语言特性, 建议先掌握基础常用的: ...
- s3c2440 移值新内核 linux-4.1.36
arm-linuxgcc version 4.3.2 经过试验,最高可以编译到 linux-4.1.36 ,在高的版本会有错误 ,可能是 GCC 编译器版本较低造成. 解压比较麻烦还要装一个 xz x ...
- stack overflow--技术问答网站
转自:http://baike.baidu.com/link?url=eMR6Pwdk9IkauI5B3nZb2Yo3VUAcK6vQfrMpcSMPWqgH0ngqFkup3Gdr3t_s_yZe_ ...
- android 内存处理工具
1. LeakCanary 检查内存泄露 LeakCanary 是一个开源的在debug版本中检测内存泄漏的java库. 让我们来看看一个cait的例子: 1 2 3 4 5 6 7 8 9 10 1 ...
- Unity3D 材质球设置参数无效果的解决方法
要设置shader里有下划线的属性名,而不是后面字符串的属性名. Color tmp = ,,,alpha); mat.SetColor("_Color", tmp);
- python 学习笔记十一 SQLALchemy ORM(进阶篇)
SqlAlchemy ORM SQLAlchemy是Python编程语言下的一款ORM框架,该框架建立在数据库API之上,使用关系对象映射进行数据库操作,简言之便是:将对象转换成SQL,然后使用数据A ...
- crawler4j源码学习(2):Ziroom租房网房源信息采集爬虫
crawler4j是用Java实现的开源网络爬虫.提供了简单易用的接口,可以在几分钟内创建一个多线程网络爬虫.下面实例结合jsoup解析网页,javacsv存储采集数据:采集自如ziroom租房网(h ...
- java关于时间
import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; /** * Created b ...
- poj 3321 Apple Tree dfs序+线段树
Apple Tree Time Limit: 2000MS Memory Limit: 65536K Description There is an apple tree outsid ...
- 16s及宏基因组测序公司资源--20161104
锐羿基因: http://www.realbio.cn/index.php?c=list&cs=keyandongtai& 科研动态更新及时 青岛过程能源所: http://www.c ...