【SGU水题】
【SGU104】
【题目描述】 你想把你花店的窗户规划的好看一些,毕竟你是一个专业的卖动态仙人掌的人。今有F束花朵,每一束那都是不同种类的花儿,而且一排有许多花瓶。这1到V个花瓶被胶在架子上(你也是醉了),当然V就是这个架子上花瓶的个数(SGU原文就是这样:where V is the number of vases),然后我们是从左往右编号的,即1是最左边的一个,V是最右边一个。然而每一束花朵都是可以移动滴且我们也对他们标记成1..F,且这些编号如下意义:编号小的必须出现在编号大的左边。有如下例子,今有三种花:杜鹃(1),秋海棠(2),康乃馨(3).<span style="color:#ff0000;">现在它们必须按顺序放在花瓶里面</span>,每束杜鹃都必须在秋海棠的左边,同理每束秋海棠都必须在康乃馨的左边,如果花瓶比花束多【事实上你作为一个土豪花瓶数量总是比花多的】,显然有一些花瓶会空。由于你是一个高级强迫症患者,你最讨厌用东西混在一起,<span style="color:#ff0000;">所以一个花瓶里面只能有一束花 </span>
每一个花瓶都会有自己的特征(就好似那美丽的花儿)。因此,我们赋予了花儿与花瓶搭配后的一个美观值(毕竟你不能用脚丫子卖动态仙人掌,毕竟不美观),美观值是一个整数。下面就给出了一张美观值的表,当花瓶里没有花的时候美观值就为0(虽然我觉得空花瓶好看)
在这张表中显然杜鹃花和2号花瓶很配,而与4号花瓶充满了不协调之感。 为了实现中华民族的伟大复兴,社会主义现代化,实现中国梦,你要为社会做贡献,即在社会主义核心价值观的影响之下,你要找到一种合理的摆花方案使得其的美观值总和最大。当然如果有很多种规划方案,你给出任意一个即可,毕竟这是你的花店。
<pre name="code" class="plain">【数据规模约定】
F<=100F<=V<=100-50<=Aij<=50
Aij为把第i束花放进j花瓶的美观度
【输入】第一行两个整数 F,V下接F行每行V个整数,对于第i+1行的第j个数是将第i束花插入第j个花瓶的美观度。
【输出】第一行 最大美观度第二行 共F个整数,第i个整数表示第i束花所放花瓶的编号
好吧,SGU104真的是 N^3真的是暴力写【C党无力吐槽】
</p><p><pre name="code" class="cpp">#include <stdio.h>
#include <stdlib.h>
#define MAXN 104
int dp[MAXN][MAXN]={0};
int father[MAXN][MAXN]={0};
int a[MAXN][MAXN]={0};
int f,v;
void open()
{
freopen("104.in","r",stdin);
freopen("104.out","w",stdout);
}
void close()
{
fclose(stdin);
fclose(stdout);
}
void init()
{
int i,j;
scanf("%d%d",&f,&v);
for (i=1;i<=f;i++)
for (j=1;j<=v;j++)
scanf("%d",&a[i][j]);
for (i=1;i<=v;i++)
{
dp[1][i]=a[1][i];
}
}
void print(int n,int x)
{
if (n==0)
return ;
print(n-1,father[n][x]);
printf("%d ",x);
}
void work()
{
int i,j,k,maxi;
for (i=2;i<=f;i++)
{
dp[i][i]=dp[i-1][i-1]+a[i][i];
father[i][i]=i-1;
for (j=i+1;j<=v;j++)
{
dp[i][j]=-2e8;
for (k=i-1;k<j;k++)
if (dp[i][j]<dp[i-1][k]+a[i][j])
{
dp[i][j]=dp[i-1][k]+a[i][j];
father[i][j]=k;
}
}
}
maxi=f;
for (i=f;i<=v;i++)
if (dp[f][maxi]<dp[f][i])
maxi=i;
printf("%d\n",dp[f][maxi]);
print(f,maxi);
}
int main()
{
open();
init();
work();
close();
return 0;
}
注意一点,有一些逗比的东西 我的题目描述中讲了这些细节【绝版良心题目描述!】
【SGU105】
There is sequence 1, 12, 123, 1234, ..., 12345678910, ... . Given first N elements of that sequence. You must determine amount of numbers in it that are divisible by 3.
这种英文连我这种小学生都能看懂。我就不翻译了,太水的题目,直接代码!找规律就可以了!
/*
计算1 12 123 1234 ……
前n项里被三整除的数
被三整除就是各数位之和能被三整除
观察到三个一组 1 12 123
1234 12345 123456
……
共有2个可以整除(即后面两个)
*/
#include <stdio.h>
#include <stdlib.h>
int n;
int main()
{
scanf("%d",&n);
printf("%d",(n/3)*2+(n%3==2));
return 0;
}
这道题是找规律,我们的方法就是打表+目测
#include <cstdio>
#include <cmath>
int main()
{
// for(long long i=sqrt(987654321.0);i<=999999999;++i)
// if( i*i%1000000000 == 987654321 )
// printf("%d\n",i);
// 111111111
// 119357639
// 380642361
// 388888889
// 611111111
// 619357639
// 880642361
// 888888889
int n;
while (scanf("%d",&n)!=EOF)
{
if (n<=8)
printf("0\n");
else if (n==9)
printf("8\n");
else
{
printf("72");
for (int i=0;i<n-10;++i)
putchar('0');
putchar('\n');
}
}
}
蒽,几道大水题!大家可以去刷了!