hdu 2191

来源:互联网 发布:淘宝客的机器软件下载 编辑:程序博客网 时间:2024/05/16 17:45

 多重背包,先前一直不过,想回去睡觉。刚修改了一下用移位运算进行二进制模拟,没想到就过了。


#include <stdio.h>#include <string.h>void OneZero(int V,int cost,int value,int *dp){for(int j = V;j>=cost;--j){if(dp[j] < dp[j - cost] + value){dp[j] = dp[j - cost] + value;}}return ;}int main(int argc, char *argv[]){//FILE *fp;//fp = freopen("in1.txt","r",stdin);int t,N,M,each_v[110],value[110],cost[110],num[110],dp[110];scanf("%d",&t);while(t--){scanf("%d%d",&N,&M);for(int i = 0;i<M;++i){scanf("%d%d%d",&cost[i],&value[i],&num[i]);}memset(dp,0,sizeof(dp));for(int i = 0;i<M;++i){//int temp = 1; int j = 0;int k = 1;for(;k < num[i];++j){OneZero(N,k*cost[i],k*value[i],dp); num[i] -= k;k <<= 1;}OneZero(N,num[i]*cost[i],num[i]*value[i],dp); }printf("%d\n",dp[N]);}return 0;}


原创粉丝点击