POJ 3034 Whac-a-Mole(DP)
2013-07-13 20:41
453 查看
题目链接
理解了题意之后,这个题感觉状态转移还是挺好想的,实现起来确实有点繁琐,代码能力还有待加强,经过很长时间才发现bug。注意坐标可能是负的。
理解了题意之后,这个题感觉状态转移还是挺好想的,实现起来确实有点繁琐,代码能力还有待加强,经过很长时间才发现bug。注意坐标可能是负的。
#include <cstdio> #include <cstring> #include <iostream> #include <cmath> #include <algorithm> using namespace std; int dp[12][40][41]; bool o[12][41][41]; int n,ans,d; int gcd(int a,int b) { return b == 0?a:gcd(b,a%b); } int fun(int t,int x,int y,int tx,int ty,int ax,int ay) { int temp = 0; while(x != ax||y != ay)//开始这里写成&& { if(o[t+1][x][y]) temp ++; x += tx; y += ty; } return temp+o[t+1][x][y]; } void judge(int t,int x,int y) { int i,j,g; for(i = x-d;i <= x+d;i ++) { for(j = y-d;j <= y+d;j ++) { if((i-x)*(i-x)+(j-y)*(j-y) > d*d) continue; if(i < 0||j < 0) continue; if(i > n+10||j > n+10) continue; g = gcd(abs(i-x),abs(j-y)); if(g == 0) g = 1; int tx,ty; tx = (i-x)/g; ty = (j-y)/g; dp[t+1][i][j] = max(dp[t+1][i][j],dp[t][x][y]+fun(t,x,y,tx,ty,i,j)); ans = max(dp[t+1][i][j],ans); } } } int main() { int m,i,j,k,y,x,t; while(scanf("%d%d%d",&n,&d,&m)!=EOF) { if(n == 0&&d == 0&&m == 0) break; memset(dp,0,sizeof(dp)); memset(o,0,sizeof(o)); for(i = 1; i <= m; i ++) { scanf("%d%d%d",&x,&y,&t); o[t][x+5][y+5] = 1; } ans = 0; for(i = 0; i <= 10; i ++) { for(j = 0; j < n+10; j ++) { for(k = 0; k < n+10; k ++) { judge(i,j,k); } } } printf("%d\n",ans); } return 0; }
相关文章推荐
- poj_3034 Whac-a-Mole(dp)
- POJ 3034 Whac-a-Mole [DP]
- poj 3034 Whac-a-Mole(dp)
- poj 3034 Whac-a-Mole(dp)
- POJ 3034 Whac-a-Mole(DP)
- 【POJ 3034】 Whac-a-Mole(DP)
- poj3034--Whac-a-Mole(dp)
- poj&nbsp;3034&nbsp;Whac-a-Mole&nbsp;dp
- POJ-3034 Whac-a-Mole 动态规划
- POJ 3034 Whac-a-Mole
- Poj3034 Whac-a-Mole
- poj-3034 Whac-a-Mole
- POJ 3034 Whac-a-Mole
- (中等) POJ 3034 Whac-a-Mole,DP。
- POJ 3034 Whac-a-Mole
- POJ 3034 Whac-a-Mole
- POJ 3034 Whac-a-Mole(三维dp+处理小技巧)
- poj 3034 Whac-a-Mole
- poj 3034 Whac-a-Mole
- POJ 3034 Whac-a-Mole