Codeforces Round #247 (Div. 2) http://codeforces.com/contest/431 代码均已投放:https://github.com/illuz/WayToACM/tree/master/CodeForces/431 A - Black Square 题目地址 题意 : Jury玩别踩白块,游戏中有四个区域,Jury点每个区域要消耗ai的卡路里
http://codeforces.com/contest/431
代码均已投放:https://github.com/illuz/WayToACM/tree/master/CodeForces/431
题目地址
题意:
Jury玩别踩白块,游戏中有四个区域,Jury点每个区域要消耗ai的卡路里,给出踩白块的序列,问要消耗多少卡路里。
分析:
模拟水题..
代码:
/* * Author: illuz <iilluzen> * File: a.cpp * Create Date: 2014-05-21 23:33:25 * Descripton: */ #include <cstdio> #include <iostream> #include <string> using namespace std; int a[5], ans; string s; int main() { for (int i = 1; i > a[i]; cin >> s; for (int i = 0; i <br> <br> <hr> <h3> <span>B - Shower Line</span> </h3> <p> <span>题目地址</span></p> <p> <span>题意</span>: <br> 5个学生排队,某一个排队方式的每一个情况下,第2i-1个人和第2个人会交谈。交谈时,第i和第j个人的交谈会产生g[i][j] + g[j][i]的欢乐(搞基)值,求中最大的欢乐值。</p> <p> <span>分析</span>: <br> 刚开始还以为人数没定,犹豫了一会... <br> 直接用next_permutation暴力,5!是可以接受的。</p> <p> <span>代码</span>:</p> <pre class="brush:php;toolbar:false">/* * Author: illuz <iilluzen> * File: b.cpp * Create Date: 2014-05-21 23:43:23 * Descripton: */ #include <cstdio> #include <iostream> #include <algorithm> using namespace std; const int N = 5; char ch; int g[N][N], mmax; int a[5] = {0, 1, 2, 3, 4}; int main() { int i = 0, j = 0; for (int i = 0; i <br> <br> <hr> <h3> <span>C - k-Tree</span> </h3> <p> <span>题目地址</span></p> <p> <span>题意</span>: <br> 一颗无限的k-tree,定义如下: <br> 每个节点都有k个分支,第i个分支的边的权值为i。 <br> 问在k-tree中有多少条路径,里面至少有一条边权值不小于d,且路径边的和为n。</p> <p> <span>分析</span>: <br> 比赛时没敲出来(太弱orz),赛后发现有个地方错了... <br> 这题可以用dp,因为是无限的树,所以根节点下来和每个节点下来是一样的,但是转移为子问题还需要一个因素,就是条件限定边必须 具体看代码...</p> <p> <span>代码</span>:</p> <pre class="brush:php;toolbar:false">/* * Author: illuz <iilluzen> * File: c.cpp * Create Date: 2014-05-22 00:20:28 * Descripton: */ #include <cstdio> #include <cstring> #include <iostream> using namespace std; typedef long long ll; const int N = 110; const int MOD = 1e9 + 7; ll D[N][2]; int n, d, k; ll dp(int r, bool b) { if (D[r][b] != -1) return D[r][b]; if (r == 0) return D[r][b] = b; D[r][b] = 0; for (int i = 1; i = d) D[r][b] = (D[r][b] + dp(r - i, 1)) % MOD; else D[r][b] = (D[r][b] + dp(r - i, 0)) % MOD; return D[r][b]; } int main() { memset(D, -1, sizeof(D)); scanf("%d%d%d", &n, &k, &d); cout <br> <br> </iostream></cstring></cstdio></iilluzen>