标签:dp 完全背包
背景:二维数组为限制条件的完全背包,1Y。学习:进化仍然是转移方程的确立,背包类问题,按照模型进行变换就好。找到限制条件和物品选择,对限制条件进行拆分为每种可能的离散块。
我的代码:
#include<cstdio>
#include<iostream>
#include<cstring>
using namespace std;
int w[109],c[109],F[109][109];
int main(void){
int n,m,k,s,ans;
while(scanf("%d%d%d%d",&n,&m,&k,&s) == 4){
ans=1e9;
for(int i=0;i < k;i++) scanf("%d%d",&w[i],&c[i]);
memset(F,0,sizeof(F));
for(int t=0;t < k;t++){
for(int j=c[t];j <= m;j++){
for(int i=1;i <= s;i++){
F[i][j]=max(F[i][j],F[i-1][j-c[t]]+w[t]);
if(F[i][j] >= n){
if(j < ans) ans=j;
}
}
}
}
if(ans <= m) printf("%d\n",m-ans);
else printf("-1\n");
}
return 0;
}
标签:dp 完全背包
原文地址:http://blog.csdn.net/jibancanyang/article/details/44101207