zoukankan      html  css  js  c++  java
  • POJ 3093 Margritas

    题目描述

    总结

    1. 枚举 i 是未被取到的价值最小的酒, 那么 0~i-1 都取到了, 对 i+1~end 运行 01 背包

    代码 有些极端 case 没考虑到

    /*
     * source.cpp
     *
     *  Created on: Apr 6, 2014
     *      Author: sangs
     */
    
    #include <stdio.h>
    #include <iostream>
    #include <string>
    #include <vector>
    #include <memory.h>
    #include <algorithm>
    using namespace std;
    
    int arr[100];
    int dp[2000];
    
    int cal(int n, int target) {
    	int res = 0;
    
    	int sum = 0;
    	for(int i = 0; i < n; i ++) {
    		sum += arr[i];
    	}
    	if(sum <= target) // all wine can be put into pack
    		return (res = 1);
    
    	for(int i = 0; i < n; i ++) {
    		memset(dp, 0, sizeof(dp));
    		dp[0] = 1;
    
    		sum = 0;
    		for(int j = 0; j < i; j ++)
    			sum += arr[j];
    
    		for(int j = i+1; j < n; j ++) {
    			for(int k = target-sum; k >= arr[j]; k --) {
    				dp[k] += dp[k-arr[j]];
    			}
    		}
    
    		// statistic
    		for(int k = target-sum; k >= 0; k --) {
    			if(target-sum - k >= arr[i])
    				break;
    			res += dp[k];
    		}
    	}
    
    	return res;
    }
    
    int main() {
    	freopen("input.txt", "r", stdin);
    	int cases, cpcases;
    	scanf("%d", &cases);
    	cpcases = cases;
    	while(cases --) {
    		int n, target;
    		scanf("%d%d", &n, &target);
    		for(int i = 0; i < n; i ++)
    			scanf("%d", arr+i);
    
    		int res = cal(n, target);
    		printf("%d %d
    ", cpcases-cases, res);
    	}
    	return 0;
    }
    

      

  • 相关阅读:
    第一次通过CLR Profile解决内存占用过高的问题
    未处理的异常
    var和dynamic的区别及如何正确使用dynamic?
    C#添加本地打印机
    CSS样式
    CSS选择器
    Winform 数据绑定
    [CLR via C#]值类型的装箱和拆箱
    Java Object
    设计模式_创建型模式
  • 原文地址:https://www.cnblogs.com/zhouzhuo/p/3649065.html
Copyright © 2011-2022 走看看