黄梅时节家家雨 , 青草池塘处处 WA
查看原帖
黄梅时节家家雨 , 青草池塘处处 WA
1098953
M_Jun楼主2024/7/23 16:30

黄梅时节家家雨 , 青草池塘处处 WA
帮帮蒟蒻吧


源代码 :

#include <iostream>
#include <stdio.h>
#include <string>
#include <string.h>
#include <math.h>
#include <algorithm>
#include <vector>
#include <stack>
#include <queue>
#include <stdlib.h>

#define INF 0x7fffffff
#define int long long 
#define re register
#define in inline
#define ios ios::sync_with_stdio(false);cin.tie(0);cout.tie(0); 

using namespace std ;

const int N = 10005 ;

int n , m , C ;
int v[N] , w[N] , d[N] ;
int a[N] , b[N] , c[N] ;

int dp[N] ;

int ans ;

in int read ( ) {// 快读 
	re int x = 0 , l = 1 ;
	re char c = getchar( ) ;
	if(!isdigit(c)) {
		if(c == '-') {
			l = -1 ;
			c = getchar( ) ;
		}
	}
	while(isdigit(c)) {
		x = x * 10 + c - '0' ;
		c = getchar( ) ;
	}
	return x * l ;
} 

in void write(int x) {// 快写 
    if(x < 0) {
		putchar('-') ;
		x = -x ;
	}
    if(x > 9) write(x / 10) ;
    putchar(x % 10 + '0') ;
}

in int MAX(int a , int b) {
	if(a > b) {
		return a ;
	} else {
		return b ;
	}
}

in void Zero_one_Pack(int w , int v , int C) {// 01背包 
	for(re int i = C ; i >= w ; i --) {
		dp[i] = MAX(dp[i] , dp[i - w] + v) ;
	} 
}

in void Complete_Pack(int w , int v , int C) {// 完全背包
	for(re int i = w ; i <= C ; i ++) {
		dp[i] = MAX(dp[i] , dp[i - w] + v) ;
	} 
}

void Multiple_Pack(int w , int v , int num , int C) { // 多重背包 
	if(w * num >= C) {
		Complete_Pack(w , v , C) ;
		return ;
	} else {
		re int cnt = 1 ;
		while(cnt <= num) {
			Zero_one_Pack(cnt * w , cnt * v , C) ;
			num -= cnt ;
			cnt *= 2 ;
		}
		Zero_one_Pack(num * w , num * v , C) ;
	}
}

signed main (void) {
	
	n = read( ) ;
	m = read( ) ;
	C = read( ) ;
	for(re int i = 1 ; i <= n ; i ++) {
		v[i] = read( ) ;
		w[i] = read( ) ;
		d[i] = read( ) ;
		Multiple_Pack(v[i] , w[i] , d[i] , C) ;
	}
	for(re int i = 1 ; i <= m ; i ++) {
		a[i] = read( ) ;
		b[i] = read( ) ;
		c[i] = read( ) ;
		for(re int j = C ; j >= 0 ; j --) {
			for(re int k = 0 ; k <= j ; k ++) {
				dp[k] = MAX(dp[j] , dp[j - k] + a[i] * k * k + b[i] * k + c[i]) ;
			}
		}
	}
	
	write(dp[C]) ;
    putchar('\n') ;
	
	return 0;
}
2024/7/23 16:30
加载中...