POJ 3034 Whac-a-Mole(DP)
题目链接
理解了题意之后,这个题感觉状态转移还是挺好想的,实现起来确实有点繁琐,代码能力还有待加强,经过很长时间才发现bug。注意坐标可能是负的。
1 #include <cstdio> 2 #include <cstring> 3 #include <iostream> 4 #include <cmath> 5 #include <algorithm> 6 using namespace std; 7 int dp[12][40][41]; 8 bool o[12][41][41]; 9 int n,ans,d; 10 int gcd(int a,int b) 11 { 12 return b == 0?a:gcd(b,a%b); 13 } 14 int fun(int t,int x,int y,int tx,int ty,int ax,int ay) 15 { 16 int temp = 0; 17 while(x != ax||y != ay)//开始这里写成&& 18 { 19 if(o[t+1][x][y]) 20 temp ++; 21 x += tx; 22 y += ty; 23 } 24 return temp+o[t+1][x][y]; 25 } 26 void judge(int t,int x,int y) 27 { 28 int i,j,g; 29 for(i = x-d;i <= x+d;i ++) 30 { 31 for(j = y-d;j <= y+d;j ++) 32 { 33 if((i-x)*(i-x)+(j-y)*(j-y) > d*d) continue; 34 if(i < 0||j < 0) continue; 35 if(i > n+10||j > n+10) continue; 36 g = gcd(abs(i-x),abs(j-y)); 37 if(g == 0) g = 1; 38 int tx,ty; 39 tx = (i-x)/g; 40 ty = (j-y)/g; 41 dp[t+1][i][j] = max(dp[t+1][i][j],dp[t][x][y]+fun(t,x,y,tx,ty,i,j)); 42 ans = max(dp[t+1][i][j],ans); 43 } 44 } 45 } 46 int main() 47 { 48 int m,i,j,k,y,x,t; 49 while(scanf("%d%d%d",&n,&d,&m)!=EOF) 50 { 51 if(n == 0&&d == 0&&m == 0) break; 52 memset(dp,0,sizeof(dp)); 53 memset(o,0,sizeof(o)); 54 for(i = 1; i <= m; i ++) 55 { 56 scanf("%d%d%d",&x,&y,&t); 57 o[t][x+5][y+5] = 1; 58 } 59 ans = 0; 60 for(i = 0; i <= 10; i ++) 61 { 62 for(j = 0; j < n+10; j ++) 63 { 64 for(k = 0; k < n+10; k ++) 65 { 66 judge(i,j,k); 67 } 68 } 69 } 70 printf("%d\n",ans); 71 } 72 return 0; 73 }
转载于:https://www.cnblogs.com/naix-x/p/3188582.html
POJ 3034 Whac-a-Mole(DP)相关推荐
- POJ 3034 Whac-a-Mole [DP]
题意:略. 思路:第一次写的时候搞复杂了,弄得跟计算几何似的= = 递推公式很好想,就是dp[x2][y2][t] = max(dp[x2][y2][t], dp[x1][y1][t-1] + onl ...
- POJ 2955 Brackets (区间DP)
题目链接:http://poj.org/problem?id=2955 Brackets Time Limit: 1000MS Memory Limit: 65536K Total Submiss ...
- poj 3071 Football(概率dp)
http://poj.org/problem? id=3071 大致题意:有2^n个足球队分成n组打比赛.给出一个矩阵a[][],a[i][j]表示i队赢得j队的概率.n次比赛的流程像这样France ...
- poj 2817 WordStack (状态dp)
http://poj.org/problem?id=2817 这个题的意思是第一行给出case数N (1 <= N <= 10),然后给出N个单词,每个一行,当输入不是正整数的时候结束.每 ...
- POJ 3280 Cheapest Palindrome(DP 回文变形)
题目链接:http://poj.org/problem?id=3280 题目大意:给定一个字符串,可以删除增加,每个操作都有代价,求出将字符串转换成回文串的最小代价 Sample Input 3 4 ...
- POJ 1947 Rebuilding Roads (树dp + 背包思想)
题目链接:http://poj.org/problem?id=1947 一共有n个节点,要求减去最少的边,行号剩下p个节点.问你去掉的最少边数. dp[u][j]表示u为子树根,且得到j个节点最少减去 ...
- poj 3590 The shuffle Problem——DP+置换
题目:http://poj.org/problem?id=3590 bzoj 1025 的弱化版.大概一样的 dp . 输出方案的时候小的环靠前.不用担心 dp 时用 > 还是 >= 来转 ...
- POJ 3133 Manhattan Wiring(插头DP)
题目链接:http://poj.org/problem?id=3133 题意:n*m的格子中有两个2和两个3,其余是空白或障碍.找出两条路径分别连接2和3,不经过障碍且不相交.使得两条路径长度和最短? ...
- POJ 1625 Censored ( Trie图 DP 高精度 )
题意 : 给出 n 个单词组成的字符集 以及 p 个非法串,问你用字符集里面的单词构造长度为 m 的单词的方案数有多少种? 分析 : 与 POJ 2778 非常相似的一道题目,如果没有做过就尝试去了解 ...
最新文章
- Stylus插件开发教程 1
- 加载 Firefox 配置
- 文巾解题 881. 救生艇
- PHP中substr截取中文乱码解决方案
- 如何在 Dapper.NET 中使用事务?
- Loadruner压数据库oracle,LoadRunner连接Oracle数据库(转)
- Service 的生命周期;两种启动方法和区别
- 添加源ubuntu_x64 安装 Adobe Reader
- 家庭记账本开发进度4
- 数据结构与算法系列----字典树
- XML学习总结(一)——XML介绍
- 沙箱环境和测试环境区别_带你一图了解iOS应用内购买流程,掌握测试环境搭建与测试方法...
- 计算机软件评估资料,软件项目工作量评估方法 计算机软件及应用 IT计算机 专业资料.doc...
- 利用Powergui进行FFT Analysis,信号源为空解决方法
- Ubuntu 20.04 server乌班图服务器部署django,uwsgi,mysql,nginx细节
- java多线程(8):Lamda表达式
- 人工智能和机器学习在医疗领域中的应用
- DBN深度信念网络介绍
- python装饰器带参数函数二阶导数公式_SICP Python 描述 1.6 高阶函数
- Linux下PhysX3.4编译和环境搭建