转载请注明出处: http://www.cnblogs.com/fraud/          ——by fraud

现场赛的时候由于有个地方有点小问题,没有成功AC,导致与金牌失之交臂。


由于今天下午有点事情,无法打重现,所以下午只是花了十分钟做了一道J题,抢了个FB,2333333333

Yue Fei's Battle

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 512000/512000 K (Java/Others)
Total Submission(s): 15    Accepted Submission(s): 3

Problem Description
Yue Fei is one of the most famous military general in Chinese history.He led Southern Song army in the wars against the Jin dynasty of northern China. Yue Fei achieved a lot of victory and hopefully could retake Kaifeng ,the former capital of Song occupied by Jin. Fearing that retaking Kaifeng might cause the Jin to release former Emperor Song Qinzong, threatening his throne, Emperor Song Gaozong took some corrupted officers' advice, sending 12 urgent orders in the form of 12 gold plaques to Yue Fei, recalling him back to the capital.

Then Yue Fei was put into prison and was killed under a charge of "maybe there is" treason. But later Yue Fei was posthumously pardoned and rehabilitated, and became a symbol of loyalty to the country. The four corrupted officers who set him up were Qin Hui,Qin Hui's wife Lady Wang, Moqi Xie and Zhang Jun. People made kneeling iron statues of them and put the statues before Yue Fei's tomb (located by the West Lake, Hangzhou). For centuries, these statues have been cursed, spat and urinated upon by people. (Now please don't do that if you go to Hangzhou and see the statues.)

One of the most important battle Yue Fei won is the battle in Zhuxian town. In Zhuxian town, Yue Fei wanted to deploy some barracks, and connected those barracks with roads. Yue Fei needed all the barracks to be connected, and in order to save money, he wanted to build as less roads as possible. There couldn't be a barrack which is too important, or else it would be attacked by enemies. So Yue Fei required that NO barrack could connect with more than 3 roads. According to his battle theory, Yue Fei also required that the length of the longest route among the barracks is exactly K. Note that the length of a route is defined as the number of barracks lied on it and there may be several longest routes with the same length K.

Yue Fei wanted to know, in how many different ways could he deploy the barracks and roads. All barracks could be considered as no different. Yue Fei could deploy as many barracks as he wanted.

For example, if K is 3,Yue Fei had 2 ways to deploy the barracks and roads as shown in figure1. If K is 4, the 3 kinds of layouts is shown in figure 2. (Thick dots stand for barracks, and segments stand for roads):


Please bring your computer and go back to Yue Fei's time to help him so that you may change the history.

 
Input
The input consists of no more than 25 test cases.

For each test, there is only one line containing a integer K(1<=K<=100,000) denoting the length of the longest route.

The input ends by K = 0.

 
Output
For each test case, print an integer denoting the number of different ways modulo 1000000007.
 
Sample Input
3
4
0
 
Sample Output
2
3
 

题意:规定每个结点最多连3个点,有若干个结点构成一棵树,则在树的直径为k时,共有几种非同构的结构。

分析:由于需要考虑非同构的情况比较复杂,那么,我们可以考虑将这棵树拆开,先看偶数,偶数比较简单

1.若直径n为偶数,则选取这棵树的直径的中间那条边,将其断开,从而产生长度均为n/2的两个分支,为了保证计数时不会将同构的重复计入,根据组合数学,则方案数为C(num[n/2]+2-1,2);

注:num[i]表示分支长度为i的非同构的种数。

  dp[i]表示分支长度从0到i的所有非同构的分支方案数。

2.若直径n为奇数,则选取这棵树的直径上的中点,从而拆分成长度为(n-1)/2,长度为(n-1)/2以及另一条长度可为0到(n-1)/2的三个分支。

  a.若剩下一条分支的长度为[0,(n-1)/2-1],根据组合数学,可以得到对应的方案数为dp[(n-1)/2-1]*C(num[(n-1)/2]+2-1,2);

  b.若剩下另一条分支的长度也为(n-1)/2,则此情况下对应的方案数为C(num[(n-1)/2]+3-1,3);

  即奇数情况为dp[(n-1)/2-1]*C(num[(n-1)/2]+2-1,2)+C(num[(n-1)/2]+3-1,3);

接下来考虑num[i]与dp[i]是如何得出的问题:

显然dp[i]只是一个前缀和,求出num[i]之后累加即可。

对于num[i],对于长度为i的分支,其端点上只能连接两个子分支(因为另一个要留着与其它分支相连),那么,对于长度为i+1的分支,则只是在长度为i的分支的端点处,增加了一个结点,然后再在新的端点上添加长度为0到i的分支。

  a.若添加的分支的长度为0到i-1,则方案数为num[i]*dp[i-1];

  b.若添加的分支的长度为i,则方案数为C(num[i]+2-1,2);

  即num[i+1]=num[i]*dp[i-1]+C(num[i]+2-1,2);

 #include <iostream>
#include <sstream>
#include <ios>
#include <iomanip>
#include <functional>
#include <algorithm>
#include <vector>
#include <string>
#include <list>
#include <queue>
#include <deque>
#include <stack>
#include <set>
#include <map>
#include <cstdio>
#include <cstdlib>
#include <cmath>
#include <cstring>
#include <climits>
#include <cctype>
using namespace std;
#define XINF INT_MAX
#define INF 0x3FFFFFFF
#define MP(X,Y) make_pair(X,Y)
#define PB(X) push_back(X)
#define REP(X,N) for(int X=0;X<N;X++)
#define REP2(X,L,R) for(int X=L;X<=R;X++)
#define DEP(X,R,L) for(int X=R;X>=L;X--)
#define CLR(A,X) memset(A,X,sizeof(A))
#define IT iterator
typedef long long ll;
typedef pair<int,int> PII;
typedef vector<PII> VII;
typedef vector<int> VI;
const int maxn=;
ll dp[maxn];
ll num[maxn];
const int mod=;
ll inv(int x)
{
int n=mod-;
ll temp=x;
ll ret=;
while(n)
{
if(n&)ret=ret*temp%mod;
temp=temp*temp%mod;
n>>=;
}
return ret;
}
int main()
{
ios::sync_with_stdio(false);
ll inv_2,inv_3;
inv_2=inv();
inv_3=inv();
dp[]=num[]=;
dp[]=num[]=;
for(int i=;i<maxn;i++)
{
dp[i]=(num[i-]*dp[i-]%mod+(num[i-]+)*num[i-]%mod*inv_2%mod)%mod;
dp[i-]+=dp[i-];
dp[i-]%=mod;
num[i]=dp[i];
}
int n;
while(cin>>n&&n)
{
ll ans;
if(n==)ans=;
else if(n==)ans=;
else if(n&)
{
ans=num[n/]*(num[n/]+)%mod*inv_2%mod*dp[n/-]%mod;
ans+=num[n/]*(num[n/]+)%mod*(num[n/]+)%mod*inv_2%mod*inv_3%mod;
ans%=mod;
}
else
{
ans=(num[n/]*(num[n/]+))%mod*inv_2%mod;
}
cout<<ans<<endl;
}
return ;
}

代码君

[hdu5136]Yue Fei's Battle 2014 亚洲区域赛广州赛区J题(dp)的更多相关文章

  1. 2014年亚洲区域赛北京赛区现场赛A,D,H,I,K题解(hdu5112,5115,5119,5220,5122)

    转载请注明出处: http://www.cnblogs.com/fraud/          ——by fraud 下午在HDU上打了一下今年北京区域赛的重现,过了5题,看来单挑只能拿拿铜牌,呜呜. ...

  2. ZOJ3827 ACM-ICPC 2014 亚洲区域赛的比赛现场牡丹江I称号 Information Entropy 水的问题

    Information Entropy Time Limit: 2 Seconds      Memory Limit: 131072 KB      Special Judge Informatio ...

  3. ZOJ3819 ACM-ICPC 2014 亚洲区域赛的比赛现场牡丹江司A称号 Average Score 注册标题

    Average Score Time Limit: 2 Seconds      Memory Limit: 131072 KB Bob is a freshman in Marjar Univers ...

  4. 第39届ACM亚洲区域赛牡丹江赛区赛后总结

    2014年10月10日,周五,早晨匆匆忙忙的出了寝室,直奔复印社去打了两份模板,然后直接就去上课了.第三节课下课,直接跟老师讲了一声,就去实验室跟学长们汇合了.12点半,踏上了开往牡丹江的列车,我们那 ...

  5. 2013 ACM-ICPC亚洲区域赛南京站C题 题解 轮廓线DP

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4804 题目大意 给你一个 \(n \times m\) 的矩形区域.你需要用 \(1 \times 1 ...

  6. 2018ACM-ICPC亚洲区域赛南京站I题Magic Potion(网络流)

    http://codeforces.com/gym/101981/attachments 题意:有n个英雄,m个敌人,k瓶药剂,给出每个英雄可以消灭的敌人的编号.每个英雄只能消灭一个敌人,但每个英雄只 ...

  7. 动态规划(计数DP):HDU 5136 Yue Fei's Battle

    Yue Fei's Battle Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 512000/512000 K (Java/Other ...

  8. 2015 ACM / ICPC 亚洲区域赛总结(长春站&北京站)

    队名:Unlimited Code Works(无尽编码)  队员:Wu.Wang.Zhou 先说一下队伍:Wu是大三学长:Wang高中noip省一:我最渣,去年来大学开始学的a+b,参加今年区域赛之 ...

  9. 2019~2020icpc亚洲区域赛徐州站H. Yuuki and a problem

    2019~2020icpc亚洲区域赛徐州站H. Yuuki and a problem 题意: 给定一个长度为\(n\)的序列,有两种操作: 1:单点修改. 2:查询区间\([L,R]\)范围内所有子 ...

随机推荐

  1. Oracle11g R2学习系列 之一安装篇

    前言 最近想去前同事推荐的一个Oracle相关的岗位竞争一下,由于之前没有使用Oracle的相关经验,所以决定学习一下,就算最终岗位应聘不成,至少也有了一些Oracle经验了,说不定哪天就用上了.再说 ...

  2. C语言中关于字符串的一些常用函数

    使用以下时应当在头文件中加入string.h getch()为当你键入任何一个值时,返回但是并不显示,立马编译结束,返回的是asc码  getchar():当你键入回车之后才算是输入结束,并且可以用p ...

  3. uva1368 DNA Consensus String

    <tex2html_verbatim_mark> Figure 1. DNA (Deoxyribonucleic Acid) is the molecule which contains ...

  4. js拖拽进度条

    <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm4.aspx. ...

  5. 用jquery可以用使用serialize()序列化表单值,那有没有什么方法可以将值填充到表单中呢? (一段不错的代码)

    serialize()的作用,是生成一个类似这种格式的字符串用于ajax提交 a=&b=&c=.你想将值填写到表单,首先要有值,然后就是表单控件的id或者能唯一定位控件的属性.然后就$ ...

  6. 动态修改ActionBar Menu的显示

    应用场景: 在主Activity中,采用InstrumentedActivity侧边栏的方式,侧边栏的每一项对应一个Fragment,要实现不同的Fragment动态显示与隐藏ActionBar Me ...

  7. LeetCode_Longest Substring Without Repeating Characters

    Given a string, find the length of the longest substring without repeating characters. For example, ...

  8. Ceph:一个开源的 Linux PB 级分布式文件系统

    探索 Ceph 文件系统和生态系统 M. Tim Jones , 自由作家 简介:  Linux®持续不断进军可扩展计算空间,特别是可扩展存储空间.Ceph 最近才加入到 Linux 中令人印象深刻的 ...

  9. ActionResult解析

    原文地址:http://blog.csdn.net/gulijiang2008/article/details/7642213 ActionResult是一个抽象类, 在Action中返回的都是其派生 ...

  10. PhpForm表单相关的超全局变量操作

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...