D - Strange Lunchbox(背包)
Posted Harris-H
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了D - Strange Lunchbox(背包)相关的知识,希望对你有一定的参考价值。
D - Strange Lunchbox(背包)
01背包的变形,考虑令 d p ( i , j ) dp(i,j) dp(i,j)表示容量一 ≥ i \\ge i ≥i且容量二 ≥ j \\ge j ≥j的最小个数。
然后按照01背包转移即可。注意判无解。
时间复杂度: O ( n m 2 ) O(nm^2) O(nm2)
// Problem: D - Strange Lunchbox
// Contest: AtCoder - Sciseed Programming Contest 2021(AtCoder Beginner Contest 219)
// URL: https://atcoder.jp/contests/abc219/tasks/abc219_d
// Memory Limit: 1024 MB
// Time Limit: 2000 ms
// Date: 2021-09-22 11:35:17
// --------by Herio--------
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
const int N=5e3+5,M=2e4+5,inf=0x3f3f3f3f,mod=1e9+7;
#define mst(a,b) memset(a,b,sizeof a)
#define PII pair<int,int>
#define PLL pair<ll,ll>
#define x first
#define y second
#define pb emplace_back
#define SZ(a) (int)a.size()
#define rep(i,a,b) for(int i=a;i<=b;++i)
#define per(i,a,b) for(int i=a;i>=b;--i)
#define ios ios::sync_with_stdio(false),cin.tie(nullptr)
void Print(int *a,int n){
for(int i=1;i<n;i++)
printf("%d ",a[i]);
printf("%d\\n",a[n]);
}
int dp[N][N],n;
int x,y;
PII a[N];
int main(){
scanf("%d%d%d",&n,&x,&y);
rep(i,1,n){
scanf("%d%d",&a[i].x,&a[i].y);
}
mst(dp,0x3f);
dp[0][0]=0;
rep(i,1,n){
for(int j=x;~j;j--)
for(int k=y;~k;k--)
dp[j][k]=min(dp[j][k],dp[max(j-a[i].x,0)][max(k-a[i].y,0)]+1);
}
if(dp[x][y]==inf) dp[x][y]=-1;
printf("%d\\n",dp[x][y]);
return 0;
}
以上是关于D - Strange Lunchbox(背包)的主要内容,如果未能解决你的问题,请参考以下文章
Strange Towers of Hanoi (POJ1958)
Codeforces 1190D. Tokitsukaze and Strange Rectangle
用 Lunchbox 在 vue3 中创建一个旋转的 3D 地球竟是如此简单
Codeforces Round #694 (Div. 2)D.Strange Definition