P2760 科技庄园

Aimee

"Doctor,你觉得问题在哪"

"就在这里"

不能摘得桃树没有意义,一次摘得消耗是一样得,而且把时间和体力的消耗是一样的,那么也不用开二维了,记得给他留一点体力就可以了

剩下的就是个多重背包

# include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm> 
#define int long long
using namespace std;
int n,m,t,a;
int x;
int va[100001];
int p;
int v[100001];
int w[100001];
int pp;
int f[10000001];
int mm[10001][10010]; 
int num;
void chai(int x,int id,int dis){
	for(int i=1;i<=x;i*=2){
		v[++num]=id*i;
		w[num]=dis*i;
		x-=i;
	}
	v[++num]=id*x;
	w[num]=dis*x;
}
int znx;
signed main(){
	scanf("%lld%lld%lld%lld",&n,&m,&t,&a);
	int lim=min(t,a-1);
	for(int i=1;i<=n;++i){
		for(int j=1;j<=m;++j){
			scanf("%d",&mm[i][j]);
		}
	} 
	for(int i=1;i<=n;++i){
		for(int j=1;j<=m;++j){
			scanf("%lld",&x);
			if(x&&mm[i][j]){
				chai(x,mm[i][j],(i+j)*2);
			}
		}
	}
	for(int i=1;i<=num;++i){
		for(int j=lim;j>=w[i];--j){
			f[j]=max(f[j],f[j-w[i]]+v[i]);
		}
	}
	for(int i=1;i<=lim;++i){
		znx=max(znx,f[i]);
	}
	cout<<znx;
	return 0;
}
上一篇:【最短路径】回家


下一篇:斜率优化小结