HDU2844Coins(多重背包)

开始没注意题目中的数据大小,直接手敲未优化的多重背包,结果TLE到死,加上二进制优化才勉强过了,后来翻了翻背包九讲,才发现自己原来的写法多挫,,,
实际上是不难的题目,按背包九讲内的形式写一个多重背包就能完美解决

#include 
#include 
#include 

using namespace std;

int V;    //背包容量

void ZeroOnePack(int Array[], int Cost, int Value)
{
    //========================================
    //使用前注意初始化数组,不要求装满初始化为0,装满除Array[0]=0外其他初始化为负无穷
    for(int v = V; v >= Cost; v--)
        if (Array[v-Cost]+Value>Array[v])
            Array[v]=Array[v-Cost]+Value;
}

void CompletePack(int Array[], int Cost, int Value)
{
    //========================================
    //使用前注意初始化数组,不要求装满初始化为0,装满除Array[0]=0外其他初始化为负无穷
    for(int v = Cost; v <= V; v++)
        if (Array[v-Cost]+Value>Array[v])
            Array[v]=Array[v-Cost]+Value;
}

void MultiplePack(int Array[],int Cost,int Value, int Count)
{
    if (Value*Count>=V)
    {
        CompletePack(Array,Cost,Value);
    }
    else
    {
        int k=1;
        while (k

你可能感兴趣的:(acm,背包)