2017 五一 清北學堂 Day1模擬考試結題報告

来源:http://www.cnblogs.com/zwfymqz/archive/2017/04/28/6783074.html
-Advertisement-
Play Games

預計分數:100+50+50 實際分數:5+50+100 =.= 多重背包 (backpack.cpp/c/pas) (1s/256M) 題目描述 提供一個背包,它最多能負載重量為W的物品。 現在給出N種物品:對於第i類物品,一共有Ci件物品;對於每一件物品,重量為Wi,價值為Vi。 找出一種裝載方 ...


預計分數:100+50+50

實際分數:5+50+100

=.=

多重背包

(backpack.cpp/c/pas)

(1s/256M)

題目描述

提供一個背包,它最多能負載重量為W的物品。

現在給出N種物品:對於第i類物品,一共有Ci件物品;對於每一件物品,重量為Wi,價值為Vi。

找出一種裝載方式使得背包中的物品總價值最大。

輸入格式(backpack.in)

第一行兩個整數N,W,代表物品的種類與背包的總負重。

第2~N+1行,每行三個整數Wi, Vi, Ci,代表第i種物品的重量、價值與數量。

輸出格式(backpack.out)

僅一行,一個整數V,代表最大的總價值。

樣例輸入

3 9

5 8 2

3 6 2

2 1 5

樣例輸出

14

數據範圍與限制

1<=N<=20, 0<=W<=1000

1<=Wi<=100, 0<=Vi<=100, 0<=Ci<=100

 一看見這道題的時候,我馬上想到了動態規劃完全背包問題,但無奈因為學習動歸年代久遠+沒怎麼學好,只能默默地打暴力;

數據範圍也挺小,老師的意思應該就是讓我們暴力。。

二十分鐘打完暴力,然後我習慣性的做了幾組極端數據改了改小錯誤就過了,

但是。。。。。。。。

因為我寫的回溯比較特殊。。。、

所以。。。。。。。。

只能過極端數據。。。。

。。。。。。。

我竟然,,被這種水題淹死了,,,

AC 代碼:

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<cstring>
 4 #include<cmath>
 5 #include<stack>
 6 #include<queue>
 7 #include<algorithm>
 8 using namespace std;
 9 struct node
10 {
11     int w;//重量
12     int v;//價值
13     int num;//數量 
14     int gdnum;
15 }a[40];
16 int n,m;
17 int ans=0;
18 void dfs(int nownum,int nowv,int noww)// 當前 背包編號 價值  重量 
19 {
20     if(nowv>ans&&noww<=m) {ans=nowv;}
21     if(noww>m||nownum>n)return;
22     
23     int p=a[nownum].gdnum;
24 
25     for(int i=0;i<=p;i++)
26     {
27         if(a[nownum].num>0)
28         {
29             a[nownum].num=a[nownum].num-i;
30             dfs(nownum+1,nowv+a[nownum].v*i,noww+a[nownum].w*i);
31             a[nownum].num=a[nownum].num+i;
32         }
33     }
34     
35     
36     //dfs(nownum+1,nowv,noww);
37 }
38 int main()
39 {
40     //freopen("backpack.in","r",stdin);
41     //freopen("backpack.out","w",stdout);
42     
43     scanf("%d%d",&n,&m);
44     
45     for(int i=1;i<=n;i++)
46     {
47         scanf("%d%d%d",&a[i].w,&a[i].v,&a[i].num);
48         a[i].gdnum=a[i].num;
49     }
50         
51     
52     dfs(1,0,0);
53     
54     printf("%d",ans);
55     
56     fclose(stdin);
57     fclose(stdout);
58     return 0;
59 }

迴圈序列

(circulate.cpp/c/pas)

(1s/256M)

 

題目描述

Alice與Bob在玩游戲:

Alice首先給出兩個數X與Y(X<=Y);

Bob則按順序將X,X+1,X+2,…,Y-1,Y寫成一個大數S。

Alice最後將S首尾相連,讓其圍成一個圈。

這時,Bob想知道,從S的開頭出發,往後的第L到第R數字之和是多少。

輸入格式(circulate.in)

第一行四個整數X,Y,L,R,代表Alice的兩個數字和Bob想要知道的第L位到第R位的數字之和。

輸出格式(circulate.out)

僅一行,一個整數M,代表第L位到第R位的數字之和。

樣例輸入

10 11 4 12

樣例輸出

7

樣例解釋

Bob將數字寫成一行大數S = 1011;圍成一個圈後,從第4位到第12位分別是1,1,0,1,1,1,0,1,1,它們的和是7.

數據範圍與限制

對於50%的數據,L=1, X,Y,L,R<=1000;

對於100%的數據,S的長度不大於10000,X,Y,L,R<=100000000.

 一開始讀題有些懵逼,但想了一會兒才發現也不是很難,也就是數據處理比較繁瑣。

於是二話不說就開始模擬。。。

但是敲完之後一看數據範圍才發現撐死也就過百分之五十的數據

想了一會兒又沒有想出什麼好演算法來。。。。

so硬著頭皮交了份模擬暴力代碼

果不其然->50分

正解:

因為從l-r很可能出現迴圈計算的情況,所以我們直接求出l和r對於生成字元串的倍數再加上餘數即可

因為在迴圈計算生成字元串的每一位數字的時候非常繁瑣,所以我們可以做一個首碼和,這樣可以大大降低時間複雜度

超時代碼:

TLE

AC代碼:

 1 #include<iostream>
 2 #include<cstdio>
 3 using namespace std;
 4 int x,y,l,r;
 5 int a[10001];
 6 int numa=1;
 7 int b[1001];
 8 int numb=1;
 9 int qiu(int o)
10 {
11     return o/numa*a[numa]+a[o%numa];
12 }
13 int main()
14 {
15     scanf("%d%d%d%d",&x,&y,&l,&r);
16     for(int i=x;i<=y;i++)
17     {
18         int p=i;
19         numb=1;
20         while(p!=0)
21         {
22             b[numb++]=p%10;
23             p=p/10;
24         }
25         for(int i=numb-1;i>=1;i--)
26         {
27             a[numa++]=b[i];
28         }
29     }
30     numa--;
31     for(int i=1;i<=numa;i++)
32     {
33         a[i]=a[i-1]+a[i];
34     }
35     cout<<qiu(r)-qiu(l-1);// -1是為了方式l號元素數兩遍 
36     return 0;
37 }
AC

合併游戲

merge.cpp/c/pas

(1s/256M)

題目描述

       Cindy和Dan在玩一個游戲。

       一開始Cindy想出了N個數,接著她把這N個數全部給了Dan。

       Dan得到這組數後,它會挑出3個數(如果不足3個則全部挑出)。Dan會把這幾個數加起來變成一個數,然後再把這個數與剩下的數再放到一起。Dan會一直這樣做,直到最後只剩下一個數。

       Cindy則會在旁邊記下每次Dan得到的數,她把這些數加起來,作為本次游戲的得分。她想知道,對於一組數,Dan能得到的最大的得分是多少?

輸入格式

       第一行一個正整數N,代表這組數的個數;

       第二行N個正整數,代表這N個整數。

輸出格式

       一行一個整數,代表可能的最大得分。

樣例輸入(merge.in)

       4

       3 1 5 6

樣例輸出(merge.out)

       29

樣例解釋

       Dan可以首先把(3,5,6)這三個數先合併起來,得到3 + 5 + 6 = 14; 接著他把剩下的兩個數再合起來,得到1 + 14 = 15.這樣,總得分是最大的 14 + 15 = 29.

數據範圍與限制

       對於50%的數據,N<=10

       對於100%的數據,N<=1000,所有數不大於1000

當我讀完題目的時候,我就想到了動態規劃,想到了堆,想到了貪心,想到了優先隊列。。。。

但是哪一個都不會,,,,。。,,。,。,。,。。

so還是跟著感覺模擬

沒想到最後居然AC了=。=

好狗血。。。。。。

AC代碼

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<cstring>
 4 #include<cmath>
 5 #include<stack>
 6 #include<queue>
 7 #include<algorithm>
 8 using namespace std;
 9 int n;
10 int a[10001];
11 int ans=0;
12 int flag=0;
13 int now=0;
14 int comp(const int &a ,const int & b)
15 {
16     return a>b;
17 }
18 void gett()
19 {
20     now=0;
21     if(a[1]!=-1&&a[2]==-1)
22     {
23         //ans=ans+a[1];
24         flag=1;
25         return ;
26     }
27     for(int i=1;i<=3;i++)
28     {
29         if(a[i]==-1)continue;
30         now=now+a[i];
31         a[i]=-1;
32     }
33     ans=ans+now;
34     a[1]=now;
35     sort(a+1,a+n+1,comp);
36 }
37 int main()
38 {
39     freopen("merge.in","r",stdin);
40     freopen("merge.out","w",stdout);
41     scanf("%d",&n);
42     
43     for(int i=1;i<=n;i++)
44     scanf("%d",&a[i]);
45     
46     sort(a+1,a+n+1,comp);
47     
48     while(flag==0)
49     {
50         gett();
51     }
52     
53     printf("%d",ans);
54     fclose(stdin);
55     fclose(stdout);
56     return 0;
57 }
AC

 

 

總結:

這次考試,不能說考的很好,因為我們學校有兩位大神拿了滿分,這個差距絕對不是一丁半點的,從思路到代碼,從樣例到極端數據,他們的能力遠遠在我之上

但又不能說考的很壞,起碼沒有犯跟前三次考試一樣的超低級錯誤(其實第一個題也犯了次低級錯誤=.=),也算是一個轉折點

第一題爆零(確實不值)

第二題超時(思維太窄)

第三題AC(有點運氣)

至少沒有出現那種一點思路都沒有純懵逼的題目,說明自己還有提升的空間

加油!


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 首先,通過NuGet添加NPOI. NPOI依賴SharpZipLib,通過NuGet添加SharpZipLib. 然後添加NPOI. 添加後項目的引用列表如下: 把DataTable轉換成Excel文件。 代碼如下: public static MemoryStream RenderDataTab ...
  • AspNetCore - MVC實戰系列目錄 . 愛留圖網站誕生 . AspNetCore - MVC實戰系列(一)之Sqlserver表映射實體模型 . AspNetCore-MVC實戰系列(二)之通過綁定郵箱找回密碼 開篇嘮嗑 本篇內容寫在5.1假期前夕,主要是讓大家能在節假日休息充點的時候能有 ...
  • 《Effective C#》快速筆記(三)- 使用 C# 表達設計 目錄 二十一、限制類型的可見性 二十二、通過定義並實現介面替代繼承 二十三、理解介面方法和虛方法的區別 二十四、用委托實現回調 二十五、用事件模式實現通知 二十六、避免返回對內部類對象的引用 二十七、讓類型支持序列化 二十八、提供組 ...
  • //設置頁眉頁腳 tempSheet.Header.Center = "2017-04-27"; tempSheet.Footer.Center = "√" + " 正常 " + "×" + " 故障 " + "○" + " 其他 "; //設置單元格邊線ICellStyle style = wb1 ...
  • NetMQ是ZeroMQ的C#移植版本,它是對標準socket介面的擴展。它提供了一種非同步消息隊列,多消息模式,消息過濾(訂閱),對多種傳輸協議的無縫訪問。本文記錄了NetMQ的源碼進行學習並分析理解。 ...
  • 1.1Spring框架的概述 1.1.1什麼是Spring Spring是分層的JavaSE和JavaEES一站式輕量級開源框架。 分層: SUN提供的EE的三層結構:web層、業務層、數據訪問層(持久層、集成層)。 Struts2是web層基於MVC設計模式框架。 Hibernate是持久層的一個 ...
  • 正則表達式是一個特殊的字元序列,它能幫助你方便的檢查一個字元串是否與某種模式匹配。 re 模塊使 Python 語言擁有全部的正則表達式功能。 compile 函數根據一個模式字元串和可選的標誌參數生成一個正則表達式對象。該對象擁有一系列方法用於正則表達式匹配和替換。 re 模塊也提供了與這些方法功 ...
  • 當我們的一個對象可能代表一個單一的實體,或者一個組合的實體,但是仍然需要通過同樣的方式被使用時,這種情形則適合使用組合模式的設計。 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...