2016.4.9 NOI codevs动态规划专练
2016-04-09 22:21
211 查看
1.NOI 最大子矩阵
比如,如下4 * 4的矩阵
0 -2 -7 0
9 2 -6 2
-4 1 -4 1
-1 8 0 -2
的最大子矩阵是
9 2
-4 1
-1 8
这个子矩阵的大小是15。输入输入是一个N * N的矩阵。输入的第一行给出N (0 < N <= 100)。再后面的若干行中,依次(首先从左到右给出第一行的N个整数,再从左到右给出第二行的N个整数……)给出矩阵中的N2个整数,整数之间由空白字符分隔(空格或者空行)。已知矩阵中整数的范围都在[-127, 127]。输出输出最大子矩阵的大小。样例输入
样例输出
来源翻译自 Greater New York 2001 的试题一般做法:N^3时间复杂度
View Code
1:最大子矩阵
总时间限制: 1000ms 内存限制: 65536kB描述已知矩阵的大小定义为矩阵中所有元素的和。给定一个矩阵,你的任务是找到最大的非空(大小至少是1 * 1)子矩阵。比如,如下4 * 4的矩阵
0 -2 -7 0
9 2 -6 2
-4 1 -4 1
-1 8 0 -2
的最大子矩阵是
9 2
-4 1
-1 8
这个子矩阵的大小是15。输入输入是一个N * N的矩阵。输入的第一行给出N (0 < N <= 100)。再后面的若干行中,依次(首先从左到右给出第一行的N个整数,再从左到右给出第二行的N个整数……)给出矩阵中的N2个整数,整数之间由空白字符分隔(空格或者空行)。已知矩阵中整数的范围都在[-127, 127]。输出输出最大子矩阵的大小。样例输入
4 0 -2 -7 0 9 2 -6 2 -4 1 -4 1 -1 8 0 -2
样例输出
15
来源翻译自 Greater New York 2001 的试题一般做法:N^3时间复杂度
/*一个普通的二维01背包,注意体力不能是0,就可以了, f[j][k]表示在使用了j个球,收到k点伤害的最大捕捉数目。 ans最好DP中更新,因为DP结束以后,最优值可能存在很多位置,伤害和球的数目不一定恰好用完 */ #include<iostream> using namespace std; #include<cstdio> #define N 1001 #define M 501 int n,m,k; struct Jl{ int qiu,dam; }; Jl jl[101]; struct Ans{ int sum,tl; }; Ans ans; int f [M]; void input() { scanf("%d%d%d",&n,&m,&k); for(int i=1;i<=k;++i) { scanf("%d%d",&jl[i].qiu,&jl[i].dam); } } void DP() { ans.sum=0; ans.tl=m; for(int i=1;i<=k;++i) for(int j=n;j>=jl[i].qiu;--j) for(int k=m-1;k>=jl[i].dam;--k) { f[j][k]=max(f[j][k],f[j-jl[i].qiu][k-jl[i].dam]+1); if((f[j][k]>ans.sum)||(f[j][k]==ans.sum&&(m-k)>ans.tl)) { ans.sum=f[j][k]; ans.tl=m-k; } } } int main() { input(); DP(); printf("%d %d\n",ans.sum,ans.tl); return 0; }
View Code
相关文章推荐
- HTML5学习之 开发工具
- 【九度OJ】题目1061:成绩排序
- 轻量级应用开发之(06)Autolayout自动布局1
- 广告轮播
- 关于c#除法运算的问题
- Java的七种单例模式
- UnknownHandler
- 现代软件工程第六章作业
- Android客户端与PHP服务端交互(一)---框架概述
- 使用gradle进行apk打包
- PHP登陆后跳转到登陆前页面实现思路及代码
- C协程实现的效率对比
- 软件开发中需求的先决条件
- Hibernate---缓存策略
- Android中如何避免OOM 异常
- 隐藏ios虚拟键盘的几种方法
- Funny Sheep(思维)
- Spring面试题
- android架构篇(1)
- 集合类说明及区别