所谓DP统计---Light OJ 1037
来源:互联网 发布:tor browser mac 编辑:程序博客网 时间:2024/06/05 11:52
Brush (III)
- Brush III
- 题目位置
- 题意
- 方法
- 代码
题目位置:
Light OJ 1037
题意:
有n个点,坐标为xi 与 yi
就是说每一次你有一把刷子,可以刷 长度为 w 的一行扫过去,如图:
扫到的点就算结果,但是一个点只有0 1 状态!
求给你k次次刷的机会,问你最多刷到多少个点?
方法:
记录在j号点向下刷一下可以有多少的点被扫到,记录一个val[ ]数组里面!
然后就可以开始DP了!
方程如下:
if(i==1&&j!=0) dp[i][j]=1;else if(!j) dp[i][j]=0;elsedp[i][j]=std::max(dp[std::max(0,i-val[i])][j-1]+val[i],dp[i-1][j]);
代码:
#include <bits/stdc++.h>#define F(i,a,b) for(int i=a;i<=b;i++)#define F'(i,a,b) for(int i=a;i>=b;i--)#define INF 0x3f3f3f3f#define N 205#define W(a) while(a--)int T,n,w,k,x;int dp[N][N],y[N],val[N];int main(){ scanf("%d",&T); for(int loc=1;loc<=T;loc++) { scanf("%d%d%d",&n,&w,&k); for(int i=1;i<=n;i++) scanf("%d%d",&x,&y[i]); memset(dp,0,sizeof(dp)); memset(val,0,sizeof(val)); std::sort(y+1,y+1+n); for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) if(y[i]-w<=y[j]&&y[j]<=y[i]) val[i]++; for(int i=1;i<=n;i++) for(int j=0;j<=k;j++) { if(i==1&&j!=0) dp[i][j]=1; else if(!j) dp[i][j]=0; else dp[i][j]=std::max(dp[std::max(0,i-val[i])][j-1]+val[i],dp[i-1][j]); } printf("Case %d: %d\n",loc,dp[n][k]); } return 0;}
阅读全文
0 0
- 所谓DP统计---Light OJ 1037
- Light OJ 1037 Agent 47 (状压DP)
- light oj 1032 数位DP
- light OJ 1205 数位DP
- light OJ 1068 数位DP
- light oj 1140 数位dp
- light oj 1422,区间dp
- Light OJ 1231(背包dp)
- light oj 1068(数位dp)
- light oj 1422(区间dp)
- light oj 1025 区间dp
- light oj 1032(数位dp)
- Light OJ 1038(概率DP)
- Light OJ 1031 区间dp
- light oj 1004 水DP
- light oj 1248 概率dp
- 区间DP :Light OJ 1031
- Light OJ:1094 Farthest Nodes in a Tree(树状DP+统计树的最大直径)
- 线程
- spring cloud task Demo搭建
- C++循环链表中进行元素的翻转
- ==、is
- 关于vector的释放问题
- 所谓DP统计---Light OJ 1037
- 安卓Banner实现轮播图
- Android事件分发
- NSD基础交换-路由器工作原理
- MySQL数据库设计总结
- Quartz教程 第3课 Job和JobDetail详解
- 最短路径—Dijkstra算法和Floyd算法
- bzoj1131: [POI2008]Sta
- 正则表达式 stringr包