水题代码

//HDU 4500
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std ;

#define REP( i , n ) for ( int i = 0 ; i < n ; ++ i )
#define REPF( i , a , b ) for ( int i = a ; i <= b ; ++ i )
#define REPV( i , a , b ) for ( int i = a ; i >= b ; -- i )
#define clear( a , x ) memset ( a , x , sizeof a )

const int MAXN = 25 ;

int f[MAXN][MAXN] ;

void work () {
	int n , m ;
	int sum ;
	int r , c , mmax ;
	while ( ~scanf ( "%d%d" , &n , &m ) && ( n || m ) ) {
		clear ( f , 0 ) ;
		REPF ( i , 1 , n )
			REPF ( j , 1 , m )
				scanf ( "%d" , &f[i][j] ) ;
		mmax = 0 ;
		REPF ( i , 1 , n )
			REPF ( j , 1 , m ) {
				sum = 0 ;
				sum += f[i - 1][j] ;
				sum += f[i + 1][j] ;
				sum += f[i][j - 1] ;
				sum += f[i][j + 1] ;
				if ( f[i][j] > 0 )
					sum = -sum ;
				if ( sum > mmax )
					mmax = sum , r = i , c = j ;
			}
		printf ( "%d %d %d\n" , r , c , mmax ) ;
	}
}

int main () {
	work () ;
	return 0 ;
}


//HDU 4501
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std ;

#define REP( i , n ) for ( int i = 0 ; i < n ; ++ i )
#define REPF( i , a , b ) for ( int i = a ; i <= b ; ++ i )
#define REPV( i , a , b ) for ( int i = a ; i >= b ; -- i )
#define clear( a , x ) memset ( a , x , sizeof a )

const int MAXN = 105 ;
const int MAXK = 6 ;

int f[MAXN][MAXN][MAXK] ;

void work () {
	int n , V1 , V2 , K ;
	int cost1 , cost2 , val ;
	int sum ;
	while ( ~scanf ( "%d%d%d%d" , &n , &V1 , &V2 , &K ) ) {
		clear ( f , 0 ) ;
		sum = 0 ;
		while ( n -- ) {
			scanf ( "%d%d%d" , &cost1 , &cost2 , &val ) ;
			if ( !cost1 || !cost2 ) {
				sum += val ;
				continue ;
			}
			if ( !val )
				continue ;
			REPV ( i , V1 , 0 )
				REPV ( j , V2 , 0 )
					REPV ( k , K , 0 ) {
						if ( i >= cost1 )
							f[i][j][k] = max ( f[i][j][k] , f[i - cost1][j][k] + val ) ;
						if ( j >= cost2 )
							f[i][j][k] = max ( f[i][j][k] , f[i][j - cost2][k] + val ) ;
						if ( k >= 1 )
							f[i][j][k] = max ( f[i][j][k] , f[i][j][k - 1] + val ) ;
					}
			
		}
		printf ( "%d\n" , sum + f[V1][V2][K] ) ;
	}
}

int main () {
	work () ;
	return 0 ;
}



//HDU 4502
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std ;

#define REP( i , n ) for ( int i = 0 ; i < n ; ++ i )
#define REPF( i , a , b ) for ( int i = a ; i <= b ; ++ i )
#define REPV( i , a , b ) for ( int i = a ; i >= b ; -- i )
#define clear( a , x ) memset ( a , x , sizeof a )

const int MAXN = 105 ;
const int MAXE = 1005 ;

struct Edge {
	int v , c , n ;
	Edge () {}
	Edge ( int var , int val , int next ) :
		v ( var ) , c ( val ) , n ( next ) {}
} ;

Edge edge[MAXE] ;
int adj[MAXN] , cntE ;
int money[MAXN] ;

void addedge ( int u , int v , int val ) {
	edge[cntE] = Edge ( v , val , adj[u] ) ;
	adj[u] = cntE ++ ;
}

void work () {
	int n , m ;
	int s , e , val ;
	cntE = 0 ;
	clear ( adj , -1 ) ;
	clear ( money , 0 ) ;
	scanf ( "%d%d" , &n , &m ) ;
	while ( m -- ) {
		scanf ( "%d%d%d" , &s , &e , &val ) ;
		if ( e > n )
			continue ;
		addedge ( s , e , val ) ;
	}
	REPV ( u , n , 1 ) {
		int tmp = 0 ;
		for ( int i = adj[u] ; ~i ; i = edge[i].n ) {
			int val = edge[i].c + money[edge[i].v + 1] ;
			tmp = max ( tmp , val ) ;
		}
		money[u] = max ( money[u + 1] , tmp ) ;
	}
	printf ( "%d\n" , money[1] ) ;
}

int main () {
	int T ;
	scanf ( "%d" , &T ) ;
	while ( T -- )
		work () ;
	return 0 ;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值