zoukankan      html  css  js  c++  java
  • wiki1169-传纸条(dp)

    http://wikioi.com/problem/1169/

    四维数组和三维数组;

    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #include<cmath>
    #include<algorithm>
    #include<bitset>
    #include<iomanip>
    
    using namespace std;
    int num[ 55 ][ 55 ] ;
    int dp[ 55 ][ 55 ][ 55 ][ 55 ] ;
     
    int main()
    {
    	int n , m ;
    	while( scanf( "%d%d" , &n , &m ) != EOF )
    	{
    		memset( dp , 0 , sizeof( dp ) ) ;
    		for( int i = 1 ; i <= n ; ++i )
    			for( int j = 1 ; j <= m ; ++j )
    				scanf( "%d" , &num[ i ][ j ] ) ;
    		for( int i1 = 1 ; i1 <= n ; ++i1 )
    			for( int j1 = 1 ; j1 <= m ; ++j1 )
    				for( int i2 = 1 ; i2 <= n ; ++i2 )
    					for( int j2 = 1 ; j2 <= m ; ++j2 )
    					{
    						int temp = max( max( dp[ i1 - 1 ][ j1 ][ i2 -1 ][ j2 ] , dp[ i1 - 1][ j1  ][ i2 ][ j2 - 1] ) , max( dp[ i1 ][ j1 -1 ][ i2 -1 ][ j2 ] , dp[ i1 ][ j1 - 1 ][ i2 ][ j2 - 1 ])) ;
    						if( i1 == i2 && j1 == j2 )	
    							dp[ i1 ][ j1 ][ i2 ][ j2 ] = num[ i1 ][ j1 ] + temp ;
    						else
    							dp[ i1 ][ j1 ][ i2 ][ j2 ] = num[ i1 ][ j1 ] + num[ i2 ][ j2 ] + temp ;
    					}
    		printf( "%d
    " , dp[ n ][ m ][ n ][ m ] ) ;
    	} 
    	return 0 ;
    }
    



    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #include<cmath>
    #include<algorithm>
    #include<bitset>
    #include<iomanip>
    
    using namespace std;
    
    int m , n , mapp[ 51 ][ 51 ] , f[ 101 ][ 51 ][ 51 ] ;
    
    void dp()
    {
    	int i , j , k , s , t , Max = 0 ;
    	for( i = 1 ; i <= m + n - 1 ; ++i )
    	{
    		t = ( i > m ) ? m : i ;
    		s = ( i > n ) ? n : i ;
    		for( j = i - s + 1 ; j <= t ; ++j )
    		{
    			for( k = i - s + 1 ; k <= t ; ++k )
    				if( j != k || i == m + n - 1 )
    				{
    					Max = 0 ;
    					if( Max < f[ i - 1 ][ j ][ k ] )
    						Max = f[ i - 1 ][ j ][ k ] ;
    					if( Max < f[ i - 1 ][ j - 1 ][ k ] )
    						Max = f[ i - 1 ][ j - 1 ][ k ] ;
    					if( Max < f[ i - 1 ][ j - 1 ][ k - 1 ] )
    						Max = f[ i - 1 ][ j - 1 ][ k - 1 ] ;
    					if( Max < f[ i - 1 ][ j ][ k - 1 ] )
    						Max = f[ i - 1 ][ j ][ k - 1] ;
    					f[ i ][ j ][ k ] = Max + mapp[ j ][ i - j + 1 ] + mapp[ k ][ i - k + 1 ] ;
    				}
    		} 
    	
    	}
    }
    int main()
    {
    	while( cin >> m >> n  )
    	{	
    		int  i , j ;
    		for( i = 1 ; i <= m ; ++i )
    			for( j = 1 ; j <= n ; ++j )
    				cin >> mapp[ i ][ j ] ;
    		dp() ;
    		cout << f[ m + n - 1 ][ m ][ m ] << endl ;
    	}
    	return 0 ;
    }
    


  • 相关阅读:
    Python环境变量设置
    Java基础视频笔记(八):多线程编程
    Java基础视频笔记(六):本地文件操作
    设计延迟加载的“单例设计模式”
    Java数组去除重复元素
    博客园真不错,终于发现一个清净之处
    [Architecture Design] 系统边界设计
    [Chatter] 架构设计是做甚么
    [DCF] Devices Communication Foundation Architecture V4
    [WPF] DataTemplate Binding to Interface
  • 原文地址:https://www.cnblogs.com/javawebsoa/p/3236913.html
Copyright © 2011-2022 走看看