SGU水题大集合 SGU104 SGU105 SGU107

来源:互联网 发布:网站用php与asp哪个好 编辑:程序博客网 时间:2024/05/04 07:09

【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 104int 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;}


【SGU107】

这道题是找规律,我们的方法就是打表+目测

#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');        }    }}
蒽,几道大水题!大家可以去刷了!


0 0
原创粉丝点击