Codeforces Round #216 (Div. 2) D. Valera and Fools

原创 2013年12月04日 22:28:24

题目链接: http://codeforces.com/contest/369/problem/D

注意题意:所有fools都向编号最小的fool开枪;但每个fool都不会笨到想自己开枪,所以编号最小的fool向编号次小的fool开枪;

                    所以只需记录编号最小的两位成员即可代表一种状态;当然当只剩一个fool时,次小编号是不存在的出界元素。

                    编号最小的两个fools只有四种状态:a活b活,a死b死,a活b死,a死b活;注意状态转移条件。

                    记忆化搜索即可(算法上依然是搜索的流程,但是搜索到的一些解用动态规划的那种思想和模式作一些保存。)

代码及注释如下:

#include <stdio.h>
#include <stdlib.h>
#include <algorithm>
#include <string.h>
#include <iostream>
#include <map>
#include <vector>
#include <queue>
#include <set>
#include <string>
#include <math.h>
#define  N 3010 
using namespace std;
int p[N],maxp[N];  
int vis[N][N];   //访问标记 
int n,k,cnt=0; 
void dfs(int a,int b,int t){  //a最小,b次小,t记录开枪次数 
  if(vis[a][b])  return;
  vis[a][b]=1;
  cnt++;
  if(t==k||b>=n)  return;
  if(p[a]){  //若a的概率不为0,则b就可能killed     
    if(maxp[b])  dfs(b+1,b+2,t+1);    //a,b都killed
    if(maxp[b]!=100)  dfs(a,b+1,t+1);  //b killed 
  }
  //若a的概率不为100,则b就可能living;若b~n的最大概率不为0,则a就可能killed 
  if(p[a]!=100 && maxp[b]!=0)  dfs(b,b+1,t+1);
}
int main()
{
  int i,j;
  while(scanf("%d %d",&n,&k)!=EOF){
    memset(maxp,0,sizeof(maxp));
    memset(vis,0,sizeof(vis));
    cnt=0;
    for(i=0;i<n;i++)  scanf("%d",&p[i]);
    for(i=n-1;i>=0;i--) maxp[i]=max(maxp[i+1],p[i]);  //记录从i至n的最大概率值 
    dfs(0,1,0);
    printf("%d\n",cnt);
  }
  return 0;
}

版权声明:本文为博主原创文章,未经博主允许不得转载。

Codeforces Round #460 (Div. 2) D. Substring(拓扑排序)

题目链接题意:有一个n个点m条边的有向图,每个节点有一个字母,路径的权值是路径上相同字母的最大个数。求最大的路径权值。思路:因为只有26个字母,所以直接假设其中一个字母为相同字母数最大的字母。枚举每一...
  • cyf199775
  • cyf199775
  • 2018年02月01日 13:55
  • 37

Codeforces Round #460 (Div. 2) D. Substring

题目链接:D. Substring 题目大意 一张有向图,每个结点上有一个字母,定义一条路径的权值为路径中出现次数最多的字母的出现次数,求图中权值最大的路径的权值,如果权值可以无限大,输出-1...
  • litmxs
  • litmxs
  • 2018年01月31日 23:25
  • 66

Codeforces Round #258 (Div. 2)-(A,B,C,D,E)

A:Game With Sticks 水题。。。每次操作,都会拿走一个横行,一个竖行。 所以一共会操作min(横行,竖行)次。 #include #include #include #include ...
  • rowanhaoa
  • rowanhaoa
  • 2014年07月25日 14:39
  • 1476

Codeforces Round #444 (Div. 2) D. Ratings and Reality Shows 贪心

http://codeforces.com/problemset/problem/887/D 题意:有一个模特,她有一个初始rating值 s。她每天可能进行拍照或show中的一种活动。每拍一次...
  • qq_36553623
  • qq_36553623
  • 2017年11月08日 23:47
  • 188

Codeforces Round #444 (Div. 2)-贪心&尺取-Ratings and Reality Shows

http://codeforces.com/contest/887/problem/D 一个模特有两种活动。 ① 拍照片,挣钱 a。 ②开演唱会,花费b 给定模特这两种工作的时间表。 模特可以...
  • qq_35781950
  • qq_35781950
  • 2017年11月11日 20:11
  • 129

Codeforces Round #369 (Div. 2) D. Directed Roads (dfs+组合数学 图论)

传送门:D. Directed Roads 描述: D. Directed Roads time limit per test 2 seconds memory li...
  • guhaiteng
  • guhaiteng
  • 2016年08月30日 19:06
  • 373

Codeforces Round #250 (Div. 2) D. The Child and Zoo

D. The Child and Zoo time limit per test 2 seconds memory limit per test 256 megabytes ...
  • Haipai1998
  • Haipai1998
  • 2018年01月27日 14:39
  • 50

Codeforces Round #379 (Div. 2) D 模拟

D. Anton and Chess time limit per test 4 seconds memory limit per test 256 megabytes input sta...
  • HowardEmily
  • HowardEmily
  • 2016年11月18日 21:47
  • 214

Codeforces Round #402 (Div. 2)D. String Game【二分】

D. String Game time limit per test 2 seconds memory limit per test 512 megabytes input s...
  • mengxiang000000
  • mengxiang000000
  • 2017年02月27日 13:11
  • 242

Codeforces Round #445 (Div. 2 886D - Restoration of string)

就是定义一种最大频率字符串 就是一个大字符串中出现频率最多的字符串称之为最大频率字符串,现在给你N 个字符串告诉你这些字符串都是一个大字符串的最大频率字符串,问你这个大字符串最短是多短,并且如果有很多...
  • zhelong3205
  • zhelong3205
  • 2017年11月13日 17:33
  • 198
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Codeforces Round #216 (Div. 2) D. Valera and Fools
举报原因:
原因补充:

(最多只允许输入30个字)