SRM 598 DIV1
A
只有3种情况:200以上的单独装,3个100的装一起,某两个u,v装一起且u+v<=300,
所以做法是从大到小判断每个大小的最大能与它装一起的是谁,最后剩下100的特判.
B
第一轮如果未分出胜负,考虑一种情况:
mov1 >= mov2, 先手至少不会输.
再判断赢的条件, 设d=mov1-mov2, 先手每一轮结束后可以保证每次距离缩短[1,d],但同时
先手要保持一个安全距离safe以保证不会被后手反击:
safe >= mov2+rng2,
所以当 safe + mov2 <= mov1+d时先手必胜,否则平局.
后手的推理类似.
string FoxAndFencing::WhoCanWin(int m1, int m2, int r1, int r2, int d)
{
if (d<=r1+m1) return "Ciel";
else if (d+m1<=r2+m2) return "Liss";
else if (m2==m1) return "Draw";
else if (m1>m2)
{
if (r1+m1-*m2>r2) return "Ciel";
else return "Draw";
}else
{
printf("%d+%d , %d\n",r2,m2,r1);
if (r2+m2-*m1>r1) return "Liss";
else return "Draw";
}
}
C
首先发现一个性质: 如果某节点x有cnt个孩子,那么往下递归至少有cnt-1个子树存在标记,
这样才能保证x的子树都被识别,根据这条性质设计dp[i][0/1]即可.
但是仅仅这样dp会发现最后结果有一条从根到某叶子的未被标记的链,这条链的某些点可能不会被识别,
为了修正这个问题,可以强制根被标记,换句话说,可以枚举某个被标记的点为根.
#define maxn 51
class TPS {
public:
int minimalBeacons(vector <string>);
};
int dp[maxn][],n,cnts[maxn];
int dfs(int cur,int must,int fa,vector<string> e)
{
int sum=,tmp,res;
if (dp[cur][must]!=-) return dp[cur][must];
if (cnts[cur]==) return dp[cur][must]=must;
for (int i= ; i<n ; i++ ) if (e[cur][i]=='Y' && i!=fa)
sum += dfs(i,,cur,e);
tmp=sum;
for (int i= ; i<n ; i++ ) if(e[cur][i]=='Y' && i!=fa)
tmp = min(tmp,sum-dp[i][]+dfs(i,,cur,e));
if (must && cnts[cur]==) res = sum;
else res = tmp;
if (fa==-) res++;
return dp[cur][must]=res;
}
void initson(int cur,int fa,vector<string> e)
{
for (int i= ; i<n ; i++ )
if (e[cur][i]=='Y' && i!=fa)
{
cnts[cur]++;
initson(i,cur,e);
}
}
int TPS::minimalBeacons(vector <string> e)
{
n = e.size();
int ans = n;
for (int i= ; i<n ; i++ )
{
memset(dp,-,sizeof(dp));
memset(cnts,,sizeof(cnts));
initson(i,-,e);
ans = min(ans,dfs(i,,-,e));
}
return ans;
}
SRM 598 DIV1的更多相关文章
- Topcoder SRM 643 Div1 250<peter_pan>
Topcoder SRM 643 Div1 250 Problem 给一个整数N,再给一个vector<long long>v; N可以表示成若干个素数的乘积,N=p0*p1*p2*... ...
- Topcoder Srm 726 Div1 Hard
Topcoder Srm 726 Div1 Hard 解题思路: 问题可以看做一个二分图,左边一个点向右边一段区间连边,匹配了左边一个点就能获得对应的权值,最大化所得到的权值的和. 然后可以证明一个结 ...
- 图论 SRM 674 Div1 VampireTree 250
Problem Statement You are a genealogist specializing in family trees of vampires. Vampire famil ...
- SRM 583 DIV1
A 裸最短路. class TravelOnMars { public: int minTimes(vector <int>, int, int); }; vector<int> ...
- SRM 590 DIV1
转载请注明出处,谢谢viewmode=contents">http://blog.csdn.net/ACM_cxlove?viewmode=contents by---cxlov ...
- Topcoder SRM 602 div1题解
打卡- Easy(250pts): 题目大意:rating2200及以上和2200以下的颜色是不一样的(我就是属于那个颜色比较菜的),有个人初始rating为X,然后每一场比赛他的rating如果增加 ...
- 状态压缩DP SRM 667 Div1 OrderOfOperations 250
Problem Statement Cat Noku has just finished writing his first computer program. Noku's compute ...
- 数学 SRM 690 Div1 WolfCardGame 300
Problem Statement Wolf Sothe and Cat Snuke are playing a card game. The game is played with exa ...
- SRM 618 DIV1 500
非常棒的组合问题,看了好一会,无想法.... 有很多做法,我发现不考虑顺序的最好理解,也最好写. 结果一定是两种形式 A....A dp[n-1] A...A...A sgma(dp[j]*dp[ ...
随机推荐
- BootStrap——模态框
模态框(Modal)是BootStrap中很棒的一个插件.可以去BootStrap菜鸟驿站里面看看. 模态框(Modal)是覆盖在父窗体上的子窗体.通常,目的是显示来自一个单独的源的内容,可以在不离开 ...
- if(!!attr)是什么鬼???
看到很多代码if(!!attr),为什么不直接写if(attr):其实这是一种更严谨的写法:请测试 typeof 5和typeof !!5的区别.!!的作用是把一个其他类型的变量转成的bool类型.
- 【HPP开发】让所有中小企业拥有自己的APP
HPP hybirdApp或者hbuilderApp, 指通过html,css,js语言开发出ios和android两个版本的APP, 开发效率成倍上升,开发时间大幅缩减,开发成本同样也大大缩减. 移 ...
- SQL Profile 总结(一)
一.前提概述 在介绍SQL Profile之前,不得不说的一个工具就是SQL Tuning Advisor:这个工具是从Oracle 10g開始引入,它的任务就是分析一个指定的SQL语句,并建议怎样使 ...
- C#基础静态类的设计
- Ganglia 监控Hadoop
Ganglia监控Hadoop集群的安装部署 一. 安装环境 Ubuntu server 12.04 安装gmetad的机器:192.168.52.105 安装gmond的机 器:192.168.52 ...
- 解决iOS中tabBarItem图片默认颜色的问题(指定代码渲染模式为以原样模式的方式显示出来)
解决iOS中tabBarItem图片默认颜色的问题(指定代码渲染模式为以原样模式的方式显示出来) 解决办法:指定图片的渲染模式(imageWithRenderingMode为:UIImageRende ...
- 服务器端操作Cookie[2]
服务器端操作Cookie,主要注意会使用以下三个类: HttpCookie,HttpResponse,HttpRequest 关于HttpCookie: 属性 描述 例子 Domain 获取或设置与此 ...
- easyui之datagrid(不定时补充)
1,datagrid之formatter formatter格式化函数有三个参数: value:字段值(一般为后台传递给前台的值): row:当前行数据: index:当前行索引. return值是显 ...
- pendingIntent初步_什么是pendingIntent
pendingIntent字面意义:等待的,未决定的Intent. 要得到一个pendingIntent对象,使用方法类的静态方法 通过getActivity(Context context, int ...