csu1671 经营小卖部(DP 完全背包 好题)

这是一个完全背包问题,要分四种情况讨论:1.什么工具都不买    2.买微波炉    3.买冰箱    4.买微波炉 和 冰箱 。然后取其中利润最大的一种

状态 dp[j] : 所给资金为j时的最大营业额。

转移方程: dp[j]=max{dp[j],dp[j-ci]+wi}  //这里的wi指的是单个物品的利润。

以下为代码:

#include 
#include 
#include 
#include 

using namespace std;

struct snode
{
    int c,w,A;
}a[123];
int dp[1234];
int main()
{
   // freopen("in.txt","r",stdin);
    int T;
    scanf("%d",&T);
    while(T--){
        memset(a,0,sizeof(a));
        memset(dp,0,sizeof(dp));
        int X,n,p1,p2;
        int maxx=0;
        scanf("%d%d%d%d",&X,&n,&p1,&p2);
        for(int i=0;i0){ //买冰箱
            memset(dp,0,sizeof(dp));
            for(int i=0;i0){ //买微波炉
            memset(dp,0,sizeof(dp));
            for(int i=0;i0){//两种工具都买
            memset(dp,0,sizeof(dp));
            for(int i=0;i


你可能感兴趣的:(ACM,dp)