1003 玩骰子

暴力枚举抛的骰子的点数,算出获胜的方案数,然后在三个里面选择最大值。

#include <bits/stdc++.h>
using namespace std;int a[4], b[4];bool all_same(int *c) {return (c[1] == c[2] && c[2] == c[3]);
}bool two_same(int *c)   {return (c[1] == c[2] || c[2] == c[3]);
}bool ok(void)   {if (all_same (a))   {if (!all_same (b))   return true;else    {if (all_same (b) && a[1] > b[1])    return true;}}else if (two_same (a) && !all_same (a))  {int x1 = a[1], y1= a[3];if (a[2] == a[3])   swap (x1, y1);if (!all_same (b) && !two_same (b)) return true;else if (two_same (b) && !all_same (b))  {int x2 = b[1], y2 = b[3];if (b[2] == b[3])   swap (x2, y2);if (x1 > x2)    return true;else if (x1 == x2 && y1 > y2)   return true;}}else    {if (!all_same (b) && !two_same (b)) {if (a[3] > b[3])    return true;else if (a[3] == b[3])  {if (a[2] > b[2])    return true;else if (a[2] == b[2])  {if (a[1] > b[1])    return true;}}}}return false;
}int run(int id)    {int ret = 0;int c[4];for (int i=1; i<=3; ++i)    c[i] = a[i];for (int i=1; i<=6; ++i)    {for (int j=1; j<=3; ++j)    {a[j] = c[j];}a[id] = i;sort (a+1, a+1+3);if (ok ())  ret++;        }for (int i=1; i<=3; ++i)    a[i] = c[i];return ret;
}int main(void)  {int T;  scanf ("%d", &T);while (T--) {for (int i=1; i<=3; ++i)    scanf ("%d", &a[i]);for (int i=1; i<=3; ++i)    scanf ("%d", &b[i]);sort (a+1, a+1+3);  sort (b+1, b+1+3);if (ok ())  {printf ("1.000\n"); continue;}double ans = 0;for (int i=1; i<=3; ++i)    {int cnt = run (i);ans = max (ans, cnt / 6.0);}printf ("%.3f\n", ans);}return 0;
}

1005 ACM组队安排

两种做法:1. 递推公式,可以从n-1中选择0, 1, 2个人,然后乘上dp[n-i]的方案

      2. 排列组合,

          计算公式:f[n]=∑{ com(n,i)*com(n-i,j*2)*equa(j*2,2)/fac[j]*equa(k*3,3)/fac[k] },(i+2*j+3*k=n)

          一人一组:com(n,i)    从n个人中选i个人

          两人一组:com(n-i,j*2)*equa(j*2,2)/fac[j]    从n-i个人中选出2*j个人,并且将这2*j个人无序地平分成j组

          三人一组:equa(k*3,3)/fac[k]   ,将剩余的3*k个人无序地平分成k组

#include <bits/stdc++.h>
using namespace std;typedef long long ll;
const int MOD = 1e9 + 7;
int fact[15];
int comb[22][22];
ll dp[21];ll equa(int n, int m)   {ll ret = 1;while (n)   {ret *= comb[n][m];n -= m;}return ret;
}void Comb(void) {for (int i=0; i<21; ++i) {comb[i][i] = comb[i][0] = 1;for (int j=1; j<i; ++j) {comb[i][j] = comb[i-1][j] + comb[i-1][j-1];if (comb[i][j] >= MOD)  {comb[i][j] -= MOD;}}}
}void init(void) {Comb ();fact[0] = fact[1] = 1;for (int i=2; i<=13; ++i)   {fact[i] = fact[i-1] * i;}for (int i=0; i<=20; ++i)    {for (int j=0; j<=10; ++j)   {for (int k=0; k<=6; ++k)    {if (i + 2 * j + 3 * k <= 20)    {int m = i + 2 * j + 3 * k;dp[m] += comb[m][i] * comb[m - i][2 * j] * equa (2 * j, 2) / fact[j] * equa (3 * k, 3) / fact[k];}}}}
}void solve(void)    {dp[1] = 1;  dp[2] = 2;  dp[3] = 5;  dp[4] = 14;for (int i=5; i<=20; ++i)   {dp[i] = dp[i-1] + (i - 1) * dp[i-2] + (i - 1) * (i - 2) / 2 * dp[i-3];}
}int main(void)  {//init ();solve ();int n;while (scanf ("%d", &n) == 1)   {if (!n) break;printf ("%I64d\n", dp[n]);}return 0;
}

  

1006 逆袭指数

暴力枚举sqrt (n)的长度

#include <bits/stdc++.h>
using namespace std;const int N = 1e3 + 5;
int ans[N], v[N];
int mx;void DFS(int n, int m, int len) {if (n % m == 0) {v[len] = m;DFS (n / m, m + 1, len + 1);}else if (len > mx)  {mx = len;for (int i=0; i<len; ++i)   ans[i] = v[i];}
}int main(void)  {int n;while (scanf ("%d", &n) == 1)   {mx = 0;int k = sqrt (n) + 2;for (int i=2; i<=k; ++i)    {DFS (n, i, 0);}if (!mx)    {printf ("1\n%d\n", n);   continue;}printf ("%d\n", mx);printf ("%d", ans[0]);for (int i=1; i<mx; ++i)    {printf ("*%d", ans[i]);}puts ("");}return 0;
}

  

转载于:https://www.cnblogs.com/Running-Time/p/5007301.html

杭电计算机学院大学生程序设计竞赛(2015’11)相关推荐

  1. 计算机学院大学生程序设计竞赛(2015’11)1007 油菜花王国

    1007 油菜花王国 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Probl ...

  2. hdu计算机学院大学生程序设计竞赛(2015’11)1003 玩骰子

    玩骰子 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submis ...

  3. 计算机学院大学生程序设计竞赛(2015’11)

    1001 搬砖(dp) 题意:把N块砖每次分成两摞,每次消耗的体力是两摞砖的差值,直到每摞只剩下一块砖,求消耗的最少体力. 思路:一开始摸不到头脑,不明白题目的意思,后来和别人讨论,一来明白了和整除2 ...

  4. 杭电计算机学院吴迅冬,活动预告 | 叮~ 欢迎收看杭电Running Man

    原标题:活动预告 | 叮~ 欢迎收看杭电Running Man 计算机学院 杭电Running man来啦! 超有意思的小游戏 千瓶养乐多 11.15 学活门口 只差一个你 ٩( ᐛ )و 迫不及待想 ...

  5. 杭电计算机学院老师,杭州电子科技大学计算机学院导师教师师资介绍简介-李平...

    杭州电子科技大学计算机学院导师教师师资介绍简介-李平本站小编 Free考研考试/2021-04-11 李 平 副教授 硕士生导师 计算机科学与技术 机器学习,计算机视觉,媒体计算 lpcs@hdu.e ...

  6. hdu计算机学院,杭电计算机学院团委

    (2015-12-23 20:35) 标签: 杂谈  12月23日下午2点,在东校区报告厅由团委组织了2016年寒假社会实践培训大会.报告厅内座无虚席,团委书记张晓琪老师致辞后,培训会正式开始.张老师 ...

  7. 杭电计算机学院教师待遇,杭电:职称改革让教师有了更多获得感

    中青在线讯(叶璟 中国青年报 中青在线记者 董碧水)这个学期开学,侯平智终于顺利通过了专业技术的职务评审,成为一名"社会服务与推广型教授".他的转"正",不是因 ...

  8. 杭电计算机学院和其他学院,浙江最好的5所大学,浙江大学一家独大,其余4所争议很大...

    原标题:浙江最好的5所大学,浙江大学一家独大,其余4所争议很大 浙江,向来是走在全国前列的一个省份,经济也十分发达.但是其高等教育,比起北京.上海.江苏来还是要稍逊一筹.毕竟众所周知的是,浙江有且仅有 ...

  9. 杭电计算机学院宿舍,走进杭电 | 不得不说的杭电寝室

    原标题:走进杭电 | 不得不说的杭电寝室 杭电生活区微地图 1.关于空调 在选择学校时,很多同学都关心寝室是否有空调.独立卫浴和饮水机的问题.作为一所硬件设施先进的学校,杭电的寝室配备当然是很齐全的. ...

最新文章

  1. shell if else
  2. 图灵2月书讯:书籍,不可分离的生命伴侣
  3. php 输出图片给js,如何在php中利用croppic.js对图片进行剪切并上传
  4. 可关闭的浮动div示例
  5. autocad自动图框_AutoCAD中的小技巧,你用过几个?
  6. 设计模式学习笔记——命令(Command)模式
  7. 无路可逃:Oracle 12.2 BigSCN新特性可能的DB Link兼容性问题
  8. js map的get 和list比 那个快_js中let和var
  9. Building JavaScript Games for Phones Tablets and Desktop(6)- 响应玩家输入
  10. php7.1 mysql_安装最新LAMP环境 (CentOS7+PHP7.1.5+Mysql5.7)
  11. 如何使用融云地图,文件等插件--融云 Android SDK 2.8.0+ Extension 开发文档
  12. 多空对比(DKDB)指标
  13. 吴昊品游戏核心算法 Round 8(特别篇) —— 吴昊教你打麻将(牌型分析AI)
  14. JAVA-pdfBox-纯文件流实现PDF文件加水印后转PDF图片文件下载
  15. 利用 eutils 实现自动下载序列文件(python实现)
  16. 台式计算机连不上网,为什么台式电脑连不上wifi
  17. Hough直线检测的原理与实现
  18. 让人感到心灵平静,阳光温暖的图片
  19. 《统计学习方法》——隐马尔可夫模型
  20. 自损八百!美光停止供货华为

热门文章

  1. Docker安装(安装docker)
  2. Red Hat Enterprise Linux (RHEL) 6.4 DVD ISO 迅雷下载地址
  3. win32diskimager报错:An error occured when attempting to XXX, Error 5: Access is Denied
  4. 4-1 面向对象概述
  5. jquery中的ajax方法参数——$.ajax()方法详解
  6. JS 获取浏览器窗口大小
  7. C++重载IO操作符
  8. 【知识】人工智能数学基础知识
  9. STM32之独立看门狗原理
  10. 春节期间,我用责任链模式重构了业务代码