博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
bzoj 1296 DP
阅读量:6268 次
发布时间:2019-06-22

本文共 1251 字,大约阅读时间需要 4 分钟。

  对于每一行做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]了。

/**************************************************************    Problem: 1296    User: BLADEVIL    Language: C++    Result: Accepted    Time:120 ms    Memory:1564 kb****************************************************************/ //By BLADEVIL#include 
#include
#include
#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

 

转载于:https://www.cnblogs.com/BLADEVIL/p/3590520.html

你可能感兴趣的文章
fmt标签如何计算两个日期之间相隔的天数
查看>>
Spark核心技术原理透视一(Spark运行原理)
查看>>
《Gradle权威指南》--Gradle任务
查看>>
IntelliJ IDEA创建文件时自动填入作者时间 定制格式
查看>>
Android app启动activity并调用onCreate()方法时都默默地干了什么?
查看>>
远程监视jboss应用java内存的配置
查看>>
前端如何接收 websocket 发送过来的实时数据
查看>>
JavaWeb下载文件response
查看>>
Laravel的三种安装方法总结
查看>>
SpringMVC加载配置Properties文件的几种方式
查看>>
C#设计模式总结 C#设计模式(22)——访问者模式(Vistor Pattern) C#设计模式总结 .NET Core launch.json 简介 利用Bootstrap Paginat...
查看>>
java 项目相关 学习笔记
查看>>
numpy opencv matlab eigen SVD结果对比
查看>>
WPF获取某控件的位置,也就是偏移量
查看>>
Boost C++ 库 中文教程(全)
查看>>
solr查询优化(实践了一下效果比较明显)
查看>>
jdk目录详解及其使用方法
查看>>
说说自己对RESTful API的理解s
查看>>
通过layout实现可拖拽自动排序的UICollectionView
查看>>
服务器错误码
查看>>