题意:给定一个N*N的矩阵, 然后在这个矩阵的每个格子在任意时间会出现一个鼹鼠,这个出现
     出现鼹鼠的时间是输出信息所确定的. 现在你手里有一把锤子能够去锤这些鼹鼠. 你能
     够移动锤子,移动的两点之间的距离不能超过d,且中心在这条路径上的鼹鼠到都要受到
     打击. 每个鼹鼠出现的时间值维持一秒钟. 现在问在一次游戏中最多打到多少鼹鼠

 /*
dp
题意:给定一个N*N的矩阵, 然后在这个矩阵的每个格子在任意时间会出现一个鼹鼠,这个出现
出现鼹鼠的时间是输出信息所确定的. 现在你手里有一把锤子能够去锤这些鼹鼠. 你能
够移动锤子,移动的两点之间的距离不能超过d,且中心在这条路径上的鼹鼠到都要受到
打击. 每个鼹鼠出现的时间值维持一秒钟. 现在问在一次游戏中最多打到多少鼹鼠
思路:一开始状态定义正确,但是思路有问题,不能处理 k-1时刻 到 k时刻 的鼹鼠(也就是没法判断这“两种”鼹鼠的距离是否小于<=d) */
#include<algorithm>
#include<iostream>
#include<string.h>
#include<stdlib.h>
#include<stdio.h>
#include<math.h>
#include<queue>
#include<stack>
#include<map>
#include<set>
using namespace std;
typedef long long int64;
//typedef __int64 int64;
typedef pair<int64,int64> PII;
#define MP(a,b) make_pair((a),(b))
const int inf = 0x3f3f3f3f;
const double pi=acos(-1.0);
const int dx[]={,-,,};
const int dy[]={,,,-};
const double eps = 1e-;
const int maxm = ;
const int maxn = ; int mat[ ][ maxn ][ maxn ];
int dp[ ][ maxn ][ maxn ];
//dp[t][x][y]:当t时刻,锤子打了xy的鼹鼠的MaxVal
int d; int dis2( int x1,int y1,int x2,int y2 ){
return (x1-x2)*(x1-x2)+(y1-y2)*(y1-y2);
} int Count( int cur_ti,int x1,int y1,int x2,int y2 ){
int cnt = ;
if( x1==x2 ){
if( y1>y2 ) swap( y1,y2 );
for( int i=y1;i<=y2;i++ ){
cnt += mat[ cur_ti ][ x1 ][ i ];
}
return cnt;
}
if( y1==y2 ){
if( x1>x2 ) swap( x1,x2 );
for( int i=x1;i<=x2;i++ ){
cnt += mat[ cur_ti ][ i ][ y1 ];
}
return cnt;
}
if( x1>x2 ){
swap( x1,x2 );
swap( y1,y2 );
}
for( int i=x1;i<=x2;i++ ){
if( ((i-x1)*y2+(x2-i)*y1)%(x2-x1)== ){
cnt += mat[ cur_ti ][ i ][ ((i-x1)*y2+(x2-i)*y1)/(x2-x1) ];
}
}
return cnt;
} int DP( int n,int MaxTi ){
n+=;
int ans = ;
for( int i=;i<=MaxTi+;i++ ){
for( int x=;x<n;x++ ){
for( int y=;y<n;y++ ){
dp[ i ][ x ][ y ] = ;
int Ymax = min( y+d,n- );
int Ymin = max( ,y-d );
int Xmax = min( x+d,n- );
int Xmin = max( ,x-d );
for( int x2=Xmin;x2<=Xmax;x2++ ){
for( int y2=Ymin;y2<=Ymax;y2++ ){
if( dis2( x,y,x2,y2 )<=d*d ){
dp[i][x][y] = max( dp[i][x][y],dp[i-][x2][y2]+Count( i-,x,y,x2,y2 ) );
}
}
}
ans = max( ans,dp[ i ][ x ][ y ] );
}
}
}
return ans;
} int main(){
int n,m;
while( scanf("%d%d%d",&n,&d,&m)== ){
if( n==&&d==&&m== )
break;
memset( mat,,sizeof( mat ) );
int MaxTi = ;
for( int i=;i<m;i++ ){
int x,y,t;
scanf("%d%d%d",&x,&y,&t);
x += ;
y += ;
MaxTi = max( MaxTi,t );
mat[ t ][ x ][ y ] = ;
}
int ans = DP( n,MaxTi );
printf("%d\n",ans);
}
return ;
}

下面把自己wa的也贴出来。。。

 /*

 */
#include<algorithm>
#include<iostream>
#include<string.h>
#include<stdlib.h>
#include<stdio.h>
#include<math.h>
#include<queue>
#include<stack>
#include<map>
#include<set>
using namespace std;
typedef long long int64;
//typedef __int64 int64;
typedef pair<int64,int64> PII;
#define MP(a,b) make_pair((a),(b))
const int inf = 0x3f3f3f3f;
const double pi=acos(-1.0);
const int dx[]={,-,,};
const int dy[]={,,,-};
const double eps = 1e-;
const int maxm = ;
const int maxn = ; struct Node{
double x,y;
int t;
}node[ maxn ];
double d; double dis( int i,int j ){
return sqrt( (node[i].x-node[j].x)*(node[i].x-node[j].x)+(node[i].y-node[j].y)*(node[i].y-node[j].y) );
} struct Node2{
int val;
int pre_mole;
int cur_mole;
}dp[ ][ maxn ];
//dp[i][j]:时刻i打了第j只地鼠
int cmp( Node a,Node b ){
if( a.t!=b.t ) return a.t<b.t;
else if( a.x!=b.x ) return a.x<b.x;
else if( a.y<b.y ) return a.y<b.y;
} bool OnLine3( int x,int y,int z ){
double sum = (node[x].x-node[y].x)*(node[y].y-node[z].y)-(node[y].x-node[z].x)*(node[x].y-node[y].y);
if( sum== ) return true;
return false;
} bool JudgeDis( int x,int y,int z ){
double d1 = dis( x,y );
double d2 = dis( x,z );
double d3 = dis( y,z );
if( d1>d||d2>d||d3>d ) return false;
return true;
} int main(){
int n,m;
//double d;
freopen("in.txt","r",stdin);
while( scanf("%d%lf%d",&n,&d,&m)== ){
if( n==&&d==&&m== )
break;
int M = -;
for( int i=;i<=m;i++ ){
scanf("%lf%lf%d",&node[i].x,&node[i].y,&node[i].t);
M = max( M,node[i].t );
}
sort( node+,node++m,cmp );
//for( int i=1;i<=m;i++ )
// printf("%lf %lf\n",node[i].x,node[i].y);
for( int i=;i<;i++ ){
for( int j=;j<maxn;j++ ){
dp[i][j].pre_mole = -;
dp[i][j].cur_mole = -;
dp[i][j].val = ;
}
}//init
for( int i=;i<=m;i++ ){
dp[ node[i].t ][ i ].val = ;
dp[ node[i].t ][ i ].cur_mole = i;
}
for( int i=;i<=m;i++ ){
//printf("\nNow = %d\n",i);
for( int j=i+;j<=m;j++ ){
//if( i==j ) continue;
//printf("j = %d\n",j);
if( node[j].t>node[i].t && dis( i,j )<=d ){
if( dp[ node[j].t ][ j ].val<dp[ node[i].t ][ i ].val+ ) {
dp[ node[j].t ][ j ].val = dp[ node[i].t ][ i ].val+;
dp[ node[j].t ][ j ].cur_mole = j;
dp[ node[j].t ][ j ].pre_mole = i;
}
}
else if( node[j].t==node[i].t ){
if( dp[ node[i].t ][ i ].pre_mole==- ){
if( dis(i,j)<=d && dp[ node[i].t ][ i ].val+>dp[ node[j].t ][ j ].val ){
dp[ node[j].t ][ j ].val = dp[ node[i].t ][ i ].val+;
dp[ node[j].t ][ j ].cur_mole = j;
dp[ node[j].t ][ j ].pre_mole = i;
}
}//
else {
if( OnLine3( dp[ node[i].t ][ i ].pre_mole,i,j )==true ){
if( JudgeDis( dp[ node[i].t ][ i ].pre_mole,i,j )==true && dp[ node[i].t ][ i ].val+>dp[ node[j].t ][ j ].val ){
dp[ node[j].t ][ j ].val = dp[ node[i].t ][ i ].val+;
dp[ node[j].t ][ j ].cur_mole = j;
dp[ node[j].t ][ j ].pre_mole = dp[ node[i].t ][ i ].pre_mole;
}
}
else if( node[j].t>node[dp[ node[i].t ][ i ].pre_mole].t ){
if( dis( i,j )<=d &&dp[ node[i].t ][ i ].val+>dp[ node[j].t ][ j ].val ){
dp[ node[j].t ][ j ].val = dp[ node[i].t ][ i ].val+;
dp[ node[j].t ][ j ].cur_mole = j;
dp[ node[j].t ][ j ].pre_mole = dp[ node[i].t ][ i ].pre_mole;
}
}
}
}
}
//for( int k=1;k<=m;k++ ){
//printf("num=%d, pre=%d, cur=%d\n",dp[node[k].t][k].val,dp[node[k].t][k].pre_mole,dp[node[k].t][k].cur_mole);
//}
}
int ans = ;
for( int i=;i<=M;i++ ){
for( int j=;j<=m;j++ ){
ans = max( ans,dp[i][j].val );
}
}
printf("%d\n",ans);
}
return ;
}

POJ3034+DP的更多相关文章

  1. BZOJ 1911: [Apio2010]特别行动队 [斜率优化DP]

    1911: [Apio2010]特别行动队 Time Limit: 4 Sec  Memory Limit: 64 MBSubmit: 4142  Solved: 1964[Submit][Statu ...

  2. 2013 Asia Changsha Regional Contest---Josephina and RPG(DP)

    题目链接 http://acm.hdu.edu.cn/showproblem.php?pid=4800 Problem Description A role-playing game (RPG and ...

  3. AEAI DP V3.7.0 发布,开源综合应用开发平台

    1  升级说明 AEAI DP 3.7版本是AEAI DP一个里程碑版本,基于JDK1.7开发,在本版本中新增支持Rest服务开发机制(默认支持WebService服务开发机制),且支持WS服务.RS ...

  4. AEAI DP V3.6.0 升级说明,开源综合应用开发平台

    AEAI DP综合应用开发平台是一款扩展开发工具,专门用于开发MIS类的Java Web应用,本次发版的AEAI DP_v3.6.0版本为AEAI DP _v3.5.0版本的升级版本,该产品现已开源并 ...

  5. BZOJ 1597: [Usaco2008 Mar]土地购买 [斜率优化DP]

    1597: [Usaco2008 Mar]土地购买 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 4026  Solved: 1473[Submit] ...

  6. [斜率优化DP]【学习笔记】【更新中】

    参考资料: 1.元旦集训的课件已经很好了 http://files.cnblogs.com/files/candy99/dp.pdf 2.http://www.cnblogs.com/MashiroS ...

  7. BZOJ 1010: [HNOI2008]玩具装箱toy [DP 斜率优化]

    1010: [HNOI2008]玩具装箱toy Time Limit: 1 Sec  Memory Limit: 162 MBSubmit: 9812  Solved: 3978[Submit][St ...

  8. px、dp和sp,这些单位有什么区别?

    DP 这个是最常用但也最难理解的尺寸单位.它与“像素密度”密切相关,所以 首先我们解释一下什么是像素密度.假设有一部手机,屏幕的物理尺寸为1.5英寸x2英寸,屏幕分辨率为240x320,则我们可以计算 ...

  9. android px转换为dip/dp

    /** * 根据手机的分辨率从 dp 的单位 转成为 px(像素) */ public int dipTopx(Context context, float dpValue) { final floa ...

随机推荐

  1. MINUS,INTERSECT,UNION浅析

    转载:http://blog.csdn.net/gan690416372/article/details/5012397 SQL语句中的三个关键字:MINUS(减去),INTERSECT(交集)和UN ...

  2. Linux 最常用命令小结

    1. 文件共享 1).将windows 系统下的文件夹共享到linux的方法: 安装filezilla,设置连接linux 服务器.将文件上传. 2).mRemote 机器连接管理 2. 文件管理命令 ...

  3. Mysql 数据库的介绍

    MySQL 数据库: Oracle.DB2.SQL Server.MySQL.access.mangodb.bigtable 关系型数据库 大型 Oracle.DB2 中小型 SQL Server.M ...

  4. 字符串转与ASCII码之间的互换

    1.字符串转换成ASCII码 public static String stringToAscii(String value) { StringBuffer sbu = new StringBuffe ...

  5. pickle模块的基本使用

    pickle是python的biult-in模块: python的pickle模块实现了基本的数据序列和反序列化.通过pickle模块的序列化操作我们能够将程序中运行的对象信息保存到文件中去,永久存储 ...

  6. Ueditor设置默认字体

    其实很简单,只需要将ueditor.all.js 以及 ueditor.all.min.js 两个文件中的字体改掉即可 修改方法: 在ueditor.all.js中搜索:设置默认字体和字号: 在ued ...

  7. fltk_hello world

    int main(int argc, char *argv[]) { #define WINDOW_BG FL_BLACK #define WINDOW_WIDTH 640 #define WINDO ...

  8. javascript的setTimeout以及setInterval休眠问题。

    前端码农们在做项目中时候,必定不可少的需要做到轮播效果.但是有些特殊的需求,比如: 需要做到第一个容器内容轮播滚动之后,第二个容器内部再轮播滚动,再第三个容器内容轮播滚动. 这时候我的一开始的思路是: ...

  9. Django文档——Model中的ForeignKey,ManyToManyField与OneToOneField

    关联关系字段 (Relationship fields) ForeignKey,ManyToManyField与OneToOneField分别在Model中定义多对一,多对多,一对一关系. 例如,一本 ...

  10. 【转】C#路径/文件/目录/I/O常见操作汇总

    文件操作是程序中非常基础和重要的内容,而路径.文件.目录以及I/O都是在进行文件操作时的常见主题,这里想把这些常见的问题作个总结,对于每个问题,尽量提供一些解决方案,即使没有你想要的答案,也希望能提供 ...