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;
}


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

相关文章推荐

POJ 1297-Supermarket(DP)

题目大意:有M(1 用d[i][j]表示当前买了列表的前i个物品并且走完了街道的前j个摊子的最小花费,那么分两种情况,如果第j个摊子卖的和在列表上第i个商品相同,那么可能从d[i-1][j-...

POJ、HDU、ZOJ、SOJ水题过滤器

  • 2011年11月08日 23:44
  • 702KB
  • 下载

【POJ 1456】Supermarket

并查集应用~

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

Supermarket Description A supermarket has a set Prod of products on sale. It earns a profit px fo...

poj 1456 Supermarket

题意:给出一些商品的清单,清单上有每个商品能获得的利润和可以出售的最后期限,卖一件商品的恰好需要一天,问能获得的最大利润是多少。感觉每次读题都好痛苦啊。。。 思路:其实是蛮简单的贪心,感觉挺好玩就写...
  • qian99
  • qian99
  • 2013年10月07日 12:50
  • 593

POJ1456 Supermarket 贪心 DP

题意: 给定一批product,每个product有相应的profit和deadline,销售出一个product需要1单位的时间。 问如何销售这些商品可以使获得的利润最大。 思路: ...
  • wuyanyi
  • wuyanyi
  • 2012年01月22日 14:44
  • 595

POJ1456 Supermarket (贪心)

Supermarket Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 12801   A...

POJ-1456 Supermarket(贪心,并查集优化)

POJ-1456 Supermarket(贪心,并查集优化)
  • Dacc123
  • Dacc123
  • 2015年12月24日 22:11
  • 183

POJ 1456 Supermarket(贪心算法,可用并查集优化)

POJ 1456 Supermarket(贪心算法) 分析:对于当前集合中最大利益的商品肯定要安排,且要安排在它的截止时间点卖出.可以证明上述选择不会丢失最优解,因为首先最大利益的商品一定不能放弃,否...

POJ 1456 Supermarket(贪心 + 并查集 )

题意:一开始题意理解错了WA,WA,WA,我理解成一个物品只能在其标出的d时间销售了,其实是可以是1-d这个时间段售出,求最大利润。 解题思路:自己脑卡,看别人的看会。 分析:应该最先安排利润最高...
  • qwe585p
  • qwe585p
  • 2015年08月25日 11:07
  • 186
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:ZOJ1524 POJ1297 Supermarket
举报原因:
原因补充:

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