对此代码我有一些不理解
  • 板块灌水区
  • 楼主Shui_Dream
  • 当前回复5
  • 已保存回复5
  • 发布时间2020/5/31 14:51
  • 上次更新2023/11/7 01:22:36
查看原帖
对此代码我有一些不理解
104487
Shui_Dream楼主2020/5/31 14:51

题目:黄金矿工

#include<iostream>
#include<cstdio>
#include<vector>
#include<algorithm>
using namespace std;
struct Node{
	int x,y,c;
}node[110];
bool cmp(Node a,Node b)
{
	return a.y>b.y;
}
vector<int>h[110];
int sumc[110][110];
int sumv[110][110];
int f[10010];
int cnt=0,si;
int main()
{
//	freopen("gold.in","r",stdin); 
//    freopen("gold.out","w",stdout); 
	int n,m;
	cin>>n>>m;
	for(int i=1; i<=n; i++)
		cin>>node[i].x>>node[i].y>>node[i].c;
	sort(node+1,node+1+n,cmp);
	for(int i=1; i<=n; i++)
	{
		for(si=1; si<=cnt; si++)
		{
			int k=h[si].front();
			if(node[k].x*node[i].y==node[k].y*node[i].x)
			{
				h[si].push_back(i);
				break;
			}
		}
		if(si>cnt)
		{
			cnt++;
			h[cnt].push_back(i);
		}	
	}
	for(int i=1; i<=cnt; i++)
	{
		int len=h[i].size();
		for(int j=0; j<len; j++)
		{
			sumc[i][j+1]=sumc[i][j]+node[h[i][j]].c;
			sumv[i][j+1]=sumv[i][j]+node[h[i][j]].x*node[h[i][j]].x+node[h[i][j]].y*node[h[i][j]].y;		
		}
	}
		for(int j=1; j<=cnt; j++)
		{
			for(int i=m; i>=0; i--)
			{
				int len=h[j].size();
					for(int k=1; k<=len; k++)
						if(i>=sumv[j][k])
							f[i]=max(f[i],f[i-sumv[j][k]]+sumc[j][k]);
							
			} 
		}
	cout<<f[m]<<endl;
	return 0;
 }

主要是搞不懂cnt是干什么的

2020/5/31 14:51
加载中...