POJ 2029 水DP

来源:互联网 发布:淘宝卖家遇到职业打假 编辑:程序博客网 时间:2024/05/17 16:01

看到是二维线段树题,赶脚和POJ 1050很像,一看poj 1050 比这还难,这题用1050方法代码要复杂一点,注意输入矩阵的格式

#include <iostream>#include <cstdio>#include <cstring>using namespace std ;const int N = 1e2 + 11 ;int dp[N][N] ;int num[N][N] ;int n , m ;int main() {int t ;while(scanf("%d" ,&t)==1 && t) {memset(dp , 0 , sizeof(dp)) ;memset(num , 0 , sizeof(num));scanf("%d%d" ,&m ,&n);int a, b ;while(t--) {scanf("%d%d" ,&a , &b) ;num[b][a] = 1 ;}scanf("%d%d" ,&b ,&a) ;for(int i = 1 ; i <= n ; ++i) {for(int j = 1 ; j <= m ; ++j) {num[i][j] += num[i][j-1] ;dp[i][j] = num[i][j] ;if(j > b) dp[i][j] -= num[i][j-b] ;}}int Max = 0 ;int tmp ;for(int j = b ; j <= m ; ++j) {for(int i = 1 ; i<= n ; ++i) {dp[i][j] += dp[i-1][j] ;tmp = dp[i][j] ;if(i > a) tmp -= dp[i-a][j] ;Max = max(tmp , Max) ;}}printf("%d\n" , Max) ;}}


0 0
原创粉丝点击