1 条题解

  • 0
    @ 2024-12-24 9:54:32

    C++ :

    /*
    	author  :hzoi_ztx
    	title   :
    	ALG     :
    	comment :
    	[2014 10 11 test]
    */
    
    #include <cstdio>
    
    #define  maxn  220
    #define  maxm  30
    #define  maxc  999
    
    int n , m ;
    int f[maxn][maxm][maxc] = {0} ;
    bool flag[maxn][maxm][maxc] = {0} ;
    int a[maxn] = {0} , b[maxn] = {0} ;
    
    inline int F(int x) { return x+450 ; } 
    inline int max(const int a , const int b) {if (a>b) return a ;return b ;}
    
    int main() {
    	//#define READ
    	#ifdef  READ
    		freopen("candy.in" ,"r",stdin ) ;
    		freopen("candy.out","w",stdout) ;
    	#endif
    	scanf("%d%d", &n , &m ) ;
    	if (!n) {
    		printf("0\n0\n") ; return 0 ;
    	}
    	int i , j , c , t1 , t2 ;
    	for (i = 1 ; i <= n ; i ++ ) {
    		scanf("%d%d", &t1 , &t2 ) ;
    		a[i] = t1+t2 ; b[i] = t1-t2 ;	
    	}
    	flag[0][0][F(0)] = true ;
    	for (i = 0 ; i < n ; i ++ ) {
    		j = i ; if (j>m)j = m ;
    		for ( ; j >= 0 ; j -- ) {
    			for (c = F(-400) ; c <= F(400) ; c ++ ) {
    				if (flag[i][j][c]) {
    					flag[i+1][j][c] = true ;
    					flag[i+1][j+1][c+b[i+1]] = true ;
    					if (f[i][j][c] > f[i+1][j][c]) f[i+1][j][c] = f[i][j][c] ;
    					if (f[i][j][c]+a[i+1] > f[i+1][j+1][c+b[i+1]])
    						f[i+1][j+1][c+b[i+1]] = f[i][j][c]+a[i+1] ;
    				}
    			}
    		}
    	}	
    	for (c = 0 ; c <= 400 ; c ++ ) {
    		if (flag[n][m][F(c)]) {
    			if (flag[n][m][F(-c)] && f[n][m][F(-c)]>f[n][m][F(c)])
    				printf("%d\n%d\n",-c,f[n][m][F(-c)]) ;
    			printf("%d\n%d\n",c,f[n][m][F(c)]) ;
    			break ;
    		}
    		if (flag[n][m][F(-c)]) {
    			printf("%d\n%d\n",-c,f[n][m][F(-c)]) ;
    			break ; 
    		}
    	}
    	return 0 ;
    }
    
    
    • 1

    信息

    ID
    1219
    时间
    1000ms
    内存
    128MiB
    难度
    (无)
    标签
    递交数
    0
    已通过
    0
    上传者