SRM 512 div2

迟来的比赛总结。

256pt

这题算是比较水的一题,主要是排序一下,然后再分情况讨论一下就行了。

#include <iostream>
#include <cstdio>
#include <algorithm>
#include <string>
#include <cmath>
#include <vector>
using namespace std;

class MarbleDecoration
{
  public:
    int maxLength(int R, int G, int B);
};

int MarbleDecoration::maxLength(int R, int G, int B)
{
	vector<int>a;
	a.clear();
	a.push_back(R);
	a.push_back(G);
	a.push_back(B);
	sort(a.begin(),a.end());
	if(a[2]==0)
		return 0;
	if(a[1]==0)
		return 1;
	if(a[1]==a[2])
		return 2*a[1];
	return 2*a[1]+1;
}
 
 
512pt
这题主要是同步更新,累加
我的主要是从头开始进行枚举的。
枚举到第i天的时候。
sum-=a[i-7];  //i>=7
然后cost[i][j]+=cost[i-7][j]; //因为超过7天要买的是同一种
sum+=a[i]; //a[i]记录的是cost[i][0--m-1]的最小值
比赛快完的时候,我已经找出是初始化的问题了,过了样例赶紧交
想不到最后系统测试还是挂了,挂在初始化上
a[i]我初始化为100.
应该要大一点的,杯具a ==
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <string>
#include <cmath>
#include <vector>
using namespace std;

class MysteriousRestaurant
{
   public:
     int maxDays(vector<string> prices, int budget);
};

int MysteriousRestaurant::maxDays(vector<string> p, int b)
{
	int n=p.size();
	int m=p[0].size();
	int cost[55][55];
    int a[55];
	int i,j;

	for(i=0;i<n;i++)
	{
		for(j=0;j<m;j++)
		{
           if(p[i][j]>='0' && p[i][j]<='9')
              cost[i][j]=p[i][j]-'0';
		   else if(p[i][j]>='A' && p[i][j]<='Z')
			  cost[i][j]=p[i][j]-'A'+10;
		   else if(p[i][j]>='a' && p[i][j]<='z')
		      cost[i][j]=p[i][j]-'a'+36;
		}
	}

	for(i=0;i<=7;i++)
		a[i]=100000;
	int sum=0;

	for(i=0;i<n;i++)
	{   
		if(i>=7)
		{ 
			sum-=a[i-7];
			for(j=0;j<m;j++)
				cost[i][j]+=cost[i-7][j];
		}
		a[i]=100000;
        for(j=0;j<m;j++)
		{
			if(cost[i][j]<a[i])
				a[i]=cost[i][j];
		}
		if(sum+a[i]>b)
			break;
		sum+=a[i];
	}
	return i;
}

posted on 2011-07-15 23:06  lwbaptx  阅读(217)  评论(2编辑  收藏  举报

导航