洛谷 P2760 科技庄园

题目传送门

\(dp,将矩阵的每一个格转化成一个物品,然后跑背包\)

#include<iostream>
#include<cstdio>
#include<cstring>

using namespace std;

long long n,m,t,s,tot,c[10001],w[10001],a[10001];
long long f[101][101],ans;

int main() {
	scanf("%lld%lld%lld%lld",&n,&m,&s,&t);
	for(int i = 1;i <= n; i++)
		for(int j = 1;j <= m; j++)
			scanf("%lld",&c[++tot]);
	tot = 0;
	for(int i = 1;i <= n; i++)
		for(int j = 1;j <= m; j++)
			scanf("%lld",&a[++tot]);
	tot = 0;
	for(int i = 1;i <= n; i++)
		for(int j = 1;j <= m; j++)
			w[++tot] = (i + j) * 2;
	for(int i = 1;i <= tot; i++)
		for(int p = 1;p <= a[i]; p++)
			for(int j = s;j >= w[i]; j--)
				for(int k = t;k >= w[i]; k--) {
					f[j][k] = max(f[j][k],f[j-w[i]][k-w[i]] + c[i]);
					if(k == t) f[j][k] = 0;
					ans = max(ans,f[j][k]);
				}
	printf("%lld",ans);
	
	
	return 0;
}
posted @ 2020-09-14 09:16  Mr^Simon  阅读(80)  评论(0编辑  收藏  举报