首页 > 其他分享 >【解题报告】[JOISC 2014] 挂饰

【解题报告】[JOISC 2014] 挂饰

时间:2022-09-20 15:44:18浏览次数:93  
标签:ch int sum JOISC 挂饰 read 2014 include getchar

【我也不知道什么TM的系列】JOISC 2014 挂饰

经典的传送门

写这篇文章来告诉大家写贪心的重要性

心路历程

看到这道题第一印象:woc 蓝题

看了一下样例:woc 水题

贪了60分:woc 不是水题

AT LAST,看题解改出来了

贪心

分析一下样例

貌似是先选了一个钩最多的然后挑val大于零的选

呦西,看来这题很水么,终于5分钟就能切一道蓝题力

#include<iostream>
#include<cstdio>
#include<cstring>
#include<string>
#include<cmath>
#include<algorithm>

using namespace std;

const int maxn=2010;

inline int read()
{
	int w=0,f=1;
	char ch=getchar();
	while(ch<'0' || ch>'9')
	{
		if(ch=='-')
		{
			f=-1;
		}
		ch=getchar();
	}
	while(ch>='0' && ch<='9')
	{
		w=(w<<3)+(w<<1)+(ch^48);
		ch=getchar();
	}
	return w*f;
}

int n,ans;

struct thing
{
	int a;
	int b;
}t[maxn];

bool cmp(thing x,thing y)
{
	if(x.a!=y.a)
	{
		return x.a>y.a;
	}
	else
	{
		return x.b>y.b;
	}
}

int sum;

int main()
{
	n=read();
	
	for(int i=1;i<=n;i++)
	{
		t[i].a=read();
		t[i].b=read();
	}
	
	sort(t+1,t+n+1,cmp);
	
	ans+=t[1].b;
	
	sum+=t[1].a;
	
	for(int i=2;i<=n;i++)
	{
		if(t[i].b>0 && sum>0)
		{
			sum--;
			ans+=t[i].b;
			sum+=t[i].a;
		}
	}
	
	cout<<ans;
	
	return 0;
}

然后就WA声一片(不过这竟然能贪出60pts!!!)

emm....

01背包

仔细一看,这不就是个01背包么——代价为钩子,val为喜悦值

转移方程:dp[i][j]=max(dp[i-1][j],dp[i-1][max(j-t[i].a,0)+1]+t[i].b);

自信的交了上去

rnm劳资还不如贪心

然后就调了1h。。。。

然后就发现没开long long。。。

这告诉我们,能写贪心千万不要写正解(bushi

AC 代码

#include<iostream>
#include<cstdio>
#include<cstring>
#include<string>
#include<cmath>
#include<climits>
#include<algorithm>
#define int long long

using namespace std;

const int maxn=3010;

const int INF=-INT_MAX;

inline int read()
{
	int w=0,f=1;
	char ch=getchar();
	while(ch<'0' || ch>'9')
	{
		if(ch=='-')
		{
			f=-1;
		}
		ch=getchar();
	}
	while(ch>='0' && ch<='9')
	{
		w=(w<<3)+(w<<1)+(ch^48);
		ch=getchar();
	}
	return w*f;
}

int n;

int dp[maxn][maxn];

struct thing
{
	int a;
	int b;
}t[maxn];

bool cmp(thing x,thing y)
{
	return x.a>y.a;
}

signed main()
{
	n=read();
	
	for(int i=1;i<=n;i++)
	{
		t[i].a=read();
		t[i].b=read();
	}
	
	sort(t+1,t+n+1,cmp);
	
	for(int i=0;i<=n;i++)
	{
		dp[0][i]=INF;
		dp[i][n+1]=INF;
	}
	
	dp[0][1]=0;
	
	for(int i=1;i<=n;i++)
	{
		for(int j=0;j<=n;j++)
		{
			dp[i][j]=max(dp[i-1][j],dp[i-1][max(j-t[i].a,0ll)+1]+t[i].b);
		}
	}
	
	int ans=INF;
	
	for(int i=0;i<=n;i++)
	{
		ans=max(ans,dp[n][i]);
	}
	
	cout<<ans;
	
	return 0;
}

私たちはとても執着していて、そして思いが深ければ深いほど、絶望的になります。

标签:ch,int,sum,JOISC,挂饰,read,2014,include,getchar
From: https://www.cnblogs.com/SitoASK/p/16711277.html

相关文章

  • 板刷 JOISC
    这几年的虽然打过但忘的差不多了,所以也能弄JOISC2014Day1巴士走读随便做。有趣的家庭菜园sb题。历史研究板子题。JOISC2017Day1开荒者sb题。港口设施随便做......
  • LG3565 [POI2014]HOT-Hotels 题解
    P3565[POI2014]HOT-Hotels给定一棵树,在树上选\(3\)个点,要求两两距离相等,求方案数。原题数据范围\(n\leq5000\),可做到线性,空间\(62.5\text{MB}\)。sub1\(n\leq......
  • P2312 [NOIP2014 提高组] 解方程
    求\(a_0+a_1x+a_2x^2+\cdots+a_nx^n=0\)在\([1,m]\)内的整数解(\(n\)和\(m\)均为正整数)。\(0<n\le100,|a_i|\le10^{10000},a_n≠0,m<10^6\)。首先是数学部分,......
  • CCF 201409-1 相邻数对(C++)
    因为题目给的是不同的整数,所以就排序,然后for遍历找出差值为1的就好了#include<iostream>#include<bits/stdc++.h>#include<cstdio>usingnamespacestd;intn;i......
  • P2375 [NOI2014] 动物园
    定义字符串的前\(i\)个字符组成的字符串中一最大子串\(T\)即使前缀也是后缀,且\(|T|\leqi/2\),则定义\(num[i]=|T|\),求\(num[i]+1\)之积\(mod\)1000000007。\(......
  • Discuz论坛网站favicon图标更改方法 (2014-03-08 11:05:59)
    先制作一个网站的favicon.ico,百度搜索favicon在线制作可以找到很多的网站提供在线制作[推荐:http://www.ico.la/],favicon是ico格式的,你可以把你的图标在线制作什么ico,官方的......
  • 「JOISC 2016 Day 1」俄罗斯套娃(二维偏序)
    「JOISC2016Day1」俄罗斯套娃思路清奇的呀,先在坐标轴上画图(R为横坐标,H为纵坐标),然后发现每个询问之间没有影响,考虑离线处理,因为询问的要求是选择>=R的,所以把横坐标从大......
  • luogu P7219 [JOISC2020] 星座 3
    题面传送门实在没东西写了,随便拉一道题凑数。首先看这个东西就感觉只和两个点有关,事实上也是这样。关于最大值的问题肯定要把笛卡尔树建立出来,然后最大值变成两个点的LC......
  • 做题记录:P3166 [CQOI2014]数三角形
    题目链接题意:给定 (n+1)(m+1)(n+1)(m+1) 个点的网格图,任意投三个点,求三角形的个数。首先,不考虑三点共线的情况,方案数可以很轻松的得出来。在 (n+1)(m+1)(n+1)(m+1) ......
  • 「COCI2014-2015#2」Norma 题解
    「COCI2014-2015#2」Norma题解题目大意给定一个\(n\)个数的序列\(a\),求\[\underset{i=1}{\overset{n}{\sum}}\underset{j=i}{\overset{n}{\sum}}(j-i+1)\min(a_i,a_......