摘要: 将Xiaoqian可付的钱的值用多重背包的方式计算拼凑起来所需的最小硬币数,用完全背包的方式计算找钱的值的拼凑最小硬币数。然后再寻找最小值。#include#include#include#includeusing namespace std;int dp1[20005], dp2[20005], t, v[105], r[105];const int INF=1=20000) { for(i=v[x];i=k*v[x];i--) dp1[i]=min(dp1[i],dp1[i-k*v[x]]+k); r[x]-=k; ... 阅读全文
posted @ 2013-08-19 19:06 Ink_syk 阅读(118) 评论(0) 推荐(0) 编辑
摘要: 在完全背包的基础上再多一维就好了#include#include#include#includeusing namespace std;int v[105], r[105];int dp[105][105]; //忍耐度,杀怪数int main(){ int n, i, j, k, s, m, l; while(scanf("%d%d%d%d",&n,&m,&k,&s)!=EOF) { memset(dp,0,sizeof(dp)); for(i=0;i=n) { ans=dp[i... 阅读全文
posted @ 2013-08-19 19:02 Ink_syk 阅读(145) 评论(0) 推荐(0) 编辑
摘要: 意思是将物品尽量分成价值相近的两部分,那么就总价值除以2,然后就是多重背包的做法#include#include#include#includeusing namespace std;int v[55], r[55], m;bool dp[130000];void deal(int x){ int i; if(v[x]*r[x]>=m) { for(i=v[x];i=k*v[x];i--) if(dp[i-k*v[x]]) dp[i]=true; r[x]-=k; k*=2; ... 阅读全文
posted @ 2013-08-19 18:59 Ink_syk 阅读(110) 评论(0) 推荐(0) 编辑
摘要: 多重背包模板题#include#include#include#includeusing namespace std;int n, dp[105];struct Dami{ int v, w, d;} ri[105];void deal(int x){ int i; if(ri[x].d*ri[x].v>=n) { for(i=ri[x].v;i=ri[x].v*k;i--) dp[i]=max(dp[i-ri[x].v*k]+ri[x].w*k,dp[i]); ri[x].d-=k; ... 阅读全文
posted @ 2013-08-19 18:55 Ink_syk 阅读(157) 评论(0) 推荐(0) 编辑