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;

}

你可能感兴趣的:(div)