ZOJ1524 POJ1297 Supermarket

原创 2012年03月29日 21:00:17

DP,类似于LCS,用滚动数组实现


/*******************************************************************************
 # Author : Neo Fung
 # Email : neosfung@gmail.com
 # Last modified: 2012-03-29 21:02
 # Filename: ZOJ1524 POJ1297 Supermarket.cpp
 # Description : 
 ******************************************************************************/
#ifdef _MSC_VER
#define DEBUG
#define _CRT_SECURE_NO_DEPRECATE
#endif

#include <fstream>
#include <stdio.h>
#include <iostream>
#include <string.h>
#include <string>
#include <limits.h>
#include <algorithm>
#include <math.h>
#include <numeric>
#include <functional>
#include <ctype.h>
#define MAX 100010
#define INF 1000000000.00
#define EPS 10e-6
using namespace std;

double dp[2][MAX],value[MAX];
int num[MAX],list[MAX];
int mark[MAX];
int n,ncase=1,m;

void setINF(const int &x)
{
	for(int i=0;i<=n;++i)
		dp[x][i]=INF;
}

int func()
{
	setINF(0);
	for(int i=1;i<=n;++i)
		if(num[i]==list[1])
			dp[0][i]=min(dp[0][i-1],value[i]);
		else
			dp[0][i]=dp[0][i-1];

	int cur=1,pre=0;
	for(int i=2;i<=m;++i)
	{
		setINF(cur);
		for(int j=1;j<=n;++j)
			if(list[i]==num[j])
				dp[cur][j]=min(dp[cur][j-1],dp[pre][j-1]+value[j]);
			else
				dp[cur][j]=dp[cur][j-1];
		pre=cur;
		cur=1-pre;
	}

	return pre;
}

int main(void)
{
#ifdef DEBUG  
  freopen("../stdin.txt","r",stdin);
  freopen("../stdout.txt","w",stdout); 
#endif  

  //   scanf("%d",&ncase);

  while(~scanf("%d%d",&m,&n) && (m||n))
  {
		memset(mark,0,sizeof(mark));

		for(int i=1;i<=m;++i)
			scanf("%d",&list[i]);

		int ind=0;
		for(int i=1;i<=n;++i)
			scanf("%d %lf",&num[i],&value[i]);

		int cur=func();
		if(dp[cur][n]+EPS<INF)
			printf("%.2lf\n",dp[cur][n]);
		else
			printf("Impossible\n");
  }

  return 0;
}


版权声明:本文为博主原创文章,未经博主允许不得转载。

Supermarket(并查集(活用))

题目来源:https://vjudge.net/problem/POJ-1456 【题意】 有n种物品,给出各自的收益和售卖截止日期,让求销售额最大值。 【思路】 初看这道题,感觉贪心排个序用...
  • duan_1998
  • duan_1998
  • 2017年04月17日 21:36
  • 160

poj Supermarket(贪心)(并查集)(优先队列)

Supermarket Description A supermarket has a set Prod of products on sale. It earns a profit px fo...
  • blessLZH0108
  • blessLZH0108
  • 2017年03月08日 21:48
  • 290

ZOJ1524

题意:给定需要购买物品的顺序以及总物品对应的价格,求解按顺序购买物品时最小花费。 输入: m,n(m代表需要购买物品的清单,n代表总的物品数) Xi...(代表对应物品的序号以及价格) ...
  • k183000860
  • k183000860
  • 2015年07月20日 10:30
  • 301

POJ 1297 Supermarket 笔记

如图,购买M件物品,给出购买清单。超市有N件商品,超市按直线摆放物品,给出每个位置的物品和价格。要求按清单顺序购买,经过超市所有位置仅一次。...
  • woniupengpeng
  • woniupengpeng
  • 2017年06月12日 09:07
  • 72

POJ-1456 Supermarket【贪心】

题目链接:http://poj.org/problem?id=1456 题目大意: 有N件商品,分别给出商品的价值和销售的最后期限,只要在最后日期之前销售处,就能得到相应的利润,并且销售该商品需要...
  • niushuai666
  • niushuai666
  • 2012年01月06日 10:03
  • 4934

ZOJ 1524 Supermarket

题意:给出一张要买的东西列表,一排货架,要求在列表上从上到下,在货架上从左到右的选购东西,如果列表上第i件物品在第j个货架上买了,那么第i+1个物品,必须在第j个货架后面买. 求买完所有东西需要的最...
  • zxjcarrot
  • zxjcarrot
  • 2014年03月27日 12:25
  • 752

POJ1456Supermarket(贪心+优先队列)

Supermarket Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 9103   Ac...
  • u010372095
  • u010372095
  • 2014年08月11日 22:47
  • 1311

poj 1456 Supermarket (贪心, 并查集)

链接: http://poj.org/problem?id=1456 题目: Description A supermarket has a set Prod of pro...
  • shuangde800
  • shuangde800
  • 2012年09月27日 00:06
  • 2458

Supermarket 并查集

题目意思是 输入N组数 每组数前面一个是价值 后面一个是它的保质期 所以问在保质期之内最多卖多少钱 并查集 真心难想 都当成贪心了 哎  这个题 主要是把输进来的一对 按照价值由大到小排序 然后...
  • tydfhihfhgjkj
  • tydfhihfhgjkj
  • 2015年09月16日 22:44
  • 113

Supermarket 并查集或贪心

题目链接:http://poj.org/problem?id=1456 题目
  • u011632342
  • u011632342
  • 2014年04月04日 16:03
  • 348
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:ZOJ1524 POJ1297 Supermarket
举报原因:
原因补充:

(最多只允许输入30个字)