2 条题解
-
0于楚江@苏州湾实验初中 (xiaoyuya) LV 10 @ 2021-02-10 21:53:07
#include<iostream>
#include<cstdio>
using namespace std;
int dp[10005];
int main(){
int v,n,c,i,k,m,j,cmax=-1;
scanf("%d%d%d",&v,&n,&c);
for(i=1;i<=n;i++){
scanf("%d%d",&k,&m);
for(j=c;j>=m;j--)dp[j]=max(dp[j],dp[j-m]+k);
}
for(j=0;j<=c;j++)if(dp[j]>=v)cmax=max(cmax,c-j);
dp[c]<v?printf("Impossible"):printf("%d",cmax);
return 0;
} -
02020-01-23 16:04:22@
01背包模板题,数据范围比较极限。
/* */ #define method_1 #ifdef method_1 /* */ #include<iostream> #include<cstdio> #include<algorithm> #include<cmath> #include<set> #include<map> #include<queue> #include<stack> #include<vector> #include<cstring> #include<cstdlib> #include<iomanip> #include<ctime> #include<string> #include<bitset> #define D(x) cout<<#x<<" = "<<x<<" " #define E cout<<endl using namespace std; typedef long long ll; typedef pair<int,int>pii; const int maxn=10000+5; const int maxc=10000+5; const int INF=0x3f3f3f3f; //f[j]表示背包已用容量为j的最大体积 int V,n,C; int v[maxn],c[maxn]; int f[maxc]; void dp(){ for(int i=1;i<=n;i++){ for(int j=C;j>=c[i];j--){ f[j]=max(f[j],f[j-c[i]]+v[i]); } } for(int i=0;i<=C;i++){ if(f[i]>=V){ printf("%d",C-i); return; } } printf("Impossible"); } int main() { // ios::sync_with_stdio(false); //freopen("精卫填海.in","r",stdin); scanf("%d%d%d",&V,&n,&C); for(int i=1;i<=n;i++){ scanf("%d%d",&v[i],&c[i]); } dp(); return 0; } #endif #ifdef method_2 /* */ #endif #ifdef method_3 /* */ #endif
- 1