洛谷 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;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章