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 #216_div2_D.Valera and Fools

近些日子以来总觉得编程水平没怎么提升,这学期开始虽然每周有四场的队内训练赛,但几个月下来感觉收获不大。想想,还是以刷题的方式来学习吧。每天刷个一两题,然后写写题解。一味的打比赛打比赛被逼的很紧但是却没...

Codeforces Round #216 (Div. 2)---C. Valera and Elections

The city Valera lives in is going to hold elections to the city Parliament.The city has n districts ...

Codeforces Round #216_div2_E.Valera and Queries

转载注明出处   http://blog.csdn.net/moedane     传送门 http://codeforces.com/contest/369/problem/E   题意 给出n条线...

Codeforces Round #216 (Div. 2) A. Valera and Plates

A. Valera and Plates time limit per test 1 second memory limit per test 256 megabytes ...

Codeforces Round #216 (Div. 2) E. Valera and Queries (树状数组)

题目地址:http://codeforces.com/contest/369/problem/E 看完题目,很明显是离散+树状数组的思路,然而并没有想到怎么离散。这题的解法实在巧妙。 这题要求的是...

Codeforces Round #252 (Div. 2)441D. Valera and Swaps

题目连接:http://codeforces.com/contest/441/problem/D

Codeforces Round #216 (diy.2) C. Valera and Elections

题目链接:点击打开链接 题意:给一棵树,N-1条边的权值可以是1和2。要找包含权值为2的边的路径有几条,并            记录这条路径中距离点1最远的点。 分析: 就是树形dp,或者说是树上的...

Codeforces Round #252(Div. 2) 441A. Valera and Antique Items 水题

A. Valera and Antique Items time limit per test 1 second memory limit per test 256 megab...

Codeforces 369D. Valera and Fools

D. Valera and Fools time limit per test 1 second memory limit per test 256 megabytes input sta...

Codeforces Round #252 (Div. 2) B. Valera and Fruits(模拟)

B. Valera and Fruits time limit per test 1 second memory limit per test 256 megabytes ...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Codeforces Round #216 (Div. 2) D. Valera and Fools
举报原因:
原因补充:

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