1112
来源:互联网 发布:长征六号 知乎 编辑:程序博客网 时间:2024/05/29 05:10
Time Limit: 1 Sec Memory Limit: 128 MB
有M只走地鸡,编号1到M;有N个鸡笼,编号1到N,且N>=M。先安排这些走地鸡入笼,要求如下:
每只鸡单独入一个笼;
对于任意两只走地鸡A和B,如果A的编号>B的编号,那么要求A住的笼子编号>B住的笼子编号
每只走地鸡的居住偏好不一样,住在不同的笼子里面产生的舒适感不一样。用Aij表示编号i的鸡住在编号j的笼子里的舒适系数(越大代表越舒适)。为了让这些走地鸡将来能卖个好价钱,需要尽可能提高他们的居住舒适系数。现在要求你编写程序,安排走地鸡入笼,求所有走地鸡可能达到的最大舒适系数之和。
Input
第一行输入测试用例个数T,接下来T个测试用例:
每个测试用例首行行包含两个数: M, N。(1<=M<=100, M<=N<=100 )
接下来的M行:每行N个数,代表Aij矩阵。 (-50<=Aij<=50,Aij为编号i的鸡住在编号j的笼子里的舒适系数)
Output
输出T行,分别代表T个测试用例的最大舒适系数之和(每行以“#测试用例编号”开头,然后空一格输出结果)
Sample Input
1 3 5 7 23 -5 -24 16 5 21 -4 10 23 -21 5 -4 -20 20 Sample Output #1 53
code:
#include<stdio.h> #include<iostream> using namespace std; #define DEBUG 1 const int MAX_SIZE = 105; int a[MAX_SIZE][MAX_SIZE]; int dp[MAX_SIZE][MAX_SIZE]; int M,N; int i,j,k,t; void main_function(); void my_dp(); int main(){ int T; cin>>T; for(t = 1; t <= T; t++) { cin>>M>>N; for(i = 0; i < M; i++) { for(j = 0; j < N; j++) { cin>>a[i][j]; } } dp[0][0] = a[0][0]; for(j = 1; j < N; j++) { if(a[0][j] > dp[0][j - 1]) { dp[0][j] = a[0][j]; } else { dp[0][j] = dp[0][j-1]; } } #if DEBUG my_dp(); #else main_function(); #endif printf("#%d %d\n", t, dp[M-1][N-1]); } return 0; } //定义i只鸡,j个笼的最优解是dp[i][j], i <= j //i = 0时, 直接初始化,相当于找最大数 //i = 1时, 若不放到最后一格,则直接等于dp[i][j-1],若放最后一格,则等于dp[i-1][j-1] + a[i][j] void my_dp() { for(i = 1; i < M; i++) { for(j = i; j < N; j++) { //for(k = i - 1; k < j; k++)这里其实是重复计算了,没必要这么算。直接复用上一个计算结果就可以了 { dp[i][j] = dp[i - 1][j - 1] + a[i][j]; if(i < j && dp[i][j] < dp[i][j-1]) { dp[i][j] = dp[i][j-1]; } } } } } //这题定义状态j个笼,i只鸡的最优解是dp[i][j],其中j要大于等于i //转移方程i = 0的时候,直接初始化,相当于找最大数 //i =1的时候,若不放到最后一格,则直接等于dp[1][0],若放最后一格,则等于dp[0][0] + a[1][1] void main_function() { for(j = 1; j < N; j++) { for(i = 1; i <= j; i++) { dp[i][j] = dp[i - 1][j - 1] + a[i][j]; if(i < j && dp[i][j-1] > dp[i][j]) { dp[i][j] = dp[i][j - 1]; } } } } /************************************************************** Problem: 1112 User: seaicelin Language: C++ Result: Accepted Time:120 ms Memory:1768 kb ****************************************************************/
output:
13 57 23 -5 -24 165 21 -4 10 23-21 5 -4 -20 207 23 23 23 230 28 28 33 460 0 24 24 53#1 53请按任意键继续. .
0 0
- 1112
- 1112
- 1112
- 1112
- 1112
- 1112
- 1112
- 1112
- 1112
- poj 1112
- 1112 水题
- poj 1112
- LightOj 1112
- primer 1112
- 1112 KGold
- poj 1112
- nyoj 1112
- lightoj 1112
- linux 常用命令: find tar vi 中查找
- 关于使用sklearn进行数据预处理 —— 归一化/标准化/正则化
- C缓冲区(输入输出问题)
- intelle ide整合ssm呕心沥血的经验啊
- 隐藏域的解释,虽然我现在也不知道是啥,开始javascript,加油!
- 1112
- String 类的实现 以及 Strcpy、Strcat函数的实现
- Surf算法特征点检测与匹配
- MATLAB批量导入.dat文件
- Activity详解三 启动activity并返回结果
- Hadoop安装包的目录结构
- ReLU函数简介
- IP数据报的分片与重组
- c_stdlib头文件