bzoj 1296 DP
2014-03-09 20:09
375 查看
对于每一行做DP预处理,w[i][j]代表这一行前i个刷j次的最大价值,那么w[i][j]=max(w[i][j],w[k][j-1]+sum[k+1][i]),sum[i][j]为i-j段刷一次最多正确刷多少个。
那么我们可以将每一行看做一个物品,对于整体做DP,W[i][j]代表前i行刷j次的最大价值,那么W[i][j]=max(W[i][j],W[i-1][j-k]+w[i][k])k<m,这样就可以了。
反思:枚举k的时候方程写错了,写成W[i-1][k]+w[i][j-k]了。
那么我们可以将每一行看做一个物品,对于整体做DP,W[i][j]代表前i行刷j次的最大价值,那么W[i][j]=max(W[i][j],W[i-1][j-k]+w[i][k])k<m,这样就可以了。
反思:枚举k的时候方程写错了,写成W[i-1][k]+w[i][j-k]了。
/************************************************************** Problem: 1296 User: BLADEVIL Language: C++ Result: Accepted Time:120 ms Memory:1564 kb ****************************************************************/ //By BLADEVIL #include <cstdio> #include <cstring> #include <algorithm> #define maxn 60 #define maxk 3000 using namespace std; int n,m,t,ans; int map[maxn][maxn],w[maxn][maxn],sum[maxn][maxn],W[maxn][maxn],ww[maxn][maxk]; char s[maxn]; int work(int x) { memset(w,0,sizeof w); memset(sum,0,sizeof sum); for (int i=1;i<=m;i++) for (int j=i;j<=m;j++) for (int k=i;k<=j;k++) if (map[x][k]) sum[i][j]++; for (int i=1;i<=m;i++) for (int j=i;j<=m;j++) sum[i][j]=max(sum[i][j],j-i+1-sum[i][j]);//printf("%d %d %d\n",i,j,sum[i][j]); for (int i=1;i<=m;i++) for (int j=1;j<=m;j++) { w[j][i]=w[j-1][i]; for (int k=0;k<j;k++) w[j][i]=max(w[j][i],w[k][i-1]+sum[k+1][j]); } for (int i=1;i<=m;i++) W[x][i]=w[m][i];//printf("%d ",W[x][i]); printf("\n"); } int main() { scanf("%d %d %d",&n,&m,&t); for (int i=1;i<=n;i++) { scanf("%s",s); for (int j=0;j<m;j++) map[i][j+1]=(s[j]=='1')?1:0; } for (int i=1;i<=n;i++) work(i); for (int i=1;i<=t;i++) for (int j=1;j<=n;j++) for (int k=0;k<=min(m,i);k++) ww[j][i]=max(ww[j][i],ww[j-1][i-k]+W[j][k]),ans=max(ans,ww[j][i]); printf("%d\n",ans); return 0; }
相关文章推荐
- linux下mysql 最新版安装图解教程
- 网页布局1
- C++ 内存对齐
- Eclipse: symbol '???' could not be resolved [duplicate]
- mjpg-streamer移植
- c#,用面向对象思想写一个计算器
- 关于多台电梯调度的设计 小组成员胡宝月周其范
- 下拉菜单的制作
- Scrapy爬虫笔记【3-XPaths】
- ngx源码分析--数据结构 队列ngx_queue_t
- 第二周项目2-有序的结构体数组
- Install AMD driver in Linux
- C语言_error_MSB8031
- UITableViewCell重用机制理解
- 求两个有序数组的中位数和者第k小元素
- 想开始写博文
- uva 1474 - Evacuation Plan(dp)
- 1089. Farey Sequence
- 程序员技术练级攻略
- async And await异步编程活用基础