1. 程式人生 > >NOIP普及組板子及注意事項(wyc&&xxy給學弟們的禮物)

NOIP普及組板子及注意事項(wyc&&xxy給學弟們的禮物)

轉載至:xxy https://blog.csdn.net/xuxiayang/
和 wyc https://blog.csdn.net/mr_wuyongcong/

板子


//01揹包模版
#include<cstdio>
using namespace std;
int n,m,a[101],f[10001];
int main()
{
    scanf("%d%d",&n,&m);
    for(int i=1;i<=n;i++)
      scanf("%d",&a[i]);
    f[0]=1;
    for(int i=1;i<=
n;i++) for(int j=m;j>=a[i];j--) f[j]+=f[j-a[i]]; printf("%d",f[m]); }

//完全揹包模版
#include<cstdio>
#include<iostream>
using namespace std;
int n,m,w[501],c[501],s[501],f[6001];
int main()
{
	scanf("%d%d",&n,&m);
	for (int i=1;i<=n;i++) 
	  scanf("%d%d%d",&
w[i],&c[i],&s[i]); for (int i=1;i<=n;i++) for (int j=m;j>=0;j--) for (int k=0;k<=s[i];k++)//列舉組數 { if (j-k*w[i]<0) break;//判斷越界 f[j]=max(f[j],f[j-k*w[i]]+k*c[i]); } printf("%d",f[m]); }

//二進位制優化
#include<cstdio>
#include<iostream>
using namespace
std; int n,m,w[10001],c[10001],f[6001],n1; int main() { scanf("%d%d",&n,&m); for (int i=1;i<=n;i++) { int x,y,s,t=1; scanf("%d%d%d",&x,&y,&s); while (s>=t) { w[++n1]=x*t; c[n1]=y*t; s-=t; t*=2; } w[++n1]=x*s; c[n1]=y*s; //二進位制優化 } for (int i=1;i<=n1;i++) for (int j=m;j>=w[i];j--) f[j]=max(f[j],f[j-w[i]]+c[i]); printf("%d",f[m]); }

//混合揹包
#include<cstdio>
#include<iostream>
using namespace std;
int n,m,w[31],c[31],f[201],s[31];
int main()
{
	scanf("%d%d",&m,&n);
	for (int i=1;i<=n;i++) 
	{
	  scanf("%d%d%d",&w[i],&c[i],&s[i]);
	}
	for (int i=1;i<=n;i++)
	  if (s[i]==0)
	  {
	  	for (int j=w[i];j<=m;j++)
	  	  f[j]=max(f[j],f[j-w[i]]+c[i]);
	  }//完全揹包
	  else
	  {
	  	for (int j=1;j<=s[i];j++)
	  	  for (int k=m;k>=w[i];k--)
	  	    f[k]=max(f[k],f[k-w[i]]+c[i]);
	  }//多重
	printf("%d",f[m]);
}

//分組揹包
#include<cstdio>
#include<iostream>
using namespace std;
int w[31],c[31],a[11][32],f[201],m,n,t,p;
int main()
{
	scanf("%d%d%d",&m,&n,&t);
	for (int i=1;i<=n;i++)
	{
		scanf("%d%d%d",&w[i],&c[i],&p);
		a[p][++a[p][0]]=i;//分組
	}
	for (int i=1;i<=t;i++)
	  for (int j=m;j>=0;j--)
	    for (int k=1;k<=a[i][0];k++)
	    //列舉選的組數
	      if (j>=w[a[i][k]])//避免越界
	      {
	      	f[j]=max(f[j],f[j-w[a[i][k]]]+c[a[i][k]]);
		//動態轉移
	      }
	printf("%d",f[m]);
}

//快速冪模版 
#define ll long long
int power(int a,int b)
{
	int ans=1;
	a%=p;//不這樣很可能會炸 
	while(b)
	{
		if(b&1) ans=(ll)ans*a%p; 
		a=(ll)a*a%p
		//記得加(ll)
	}
	return ans;
}

//二分查詢
int find(int a[],int x) //在a中查詢x
{
	int l=1,r=n;//假設a陣列下標為1..n
	//並且a單調遞增,簡單來說就是前面的比後面的小  
	while(l<=r)
	{
		mid=(l+r)/2;//取中間值
		if(a[mid]==x) return mid;//找到了! 
		if(a[mid]<x)//取的值比x小,那麼我們要往右邊走
		l=mid+1;
		else //否則,我們要往左邊走
		r=mid-1; 
	}
	return ("找你mb",0);
}

//快速讀入,使用方法 x=read()
int read() 
{
	int x=0,flag=1;char ch=getchar();
	while(ch<'0'||ch>'9'){if(ch=='-')flag=-1;ch=getchar();}
	while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}
	return x*flag;
}

//快速輸出
void write(int x)
{
    if(x<0) {x=-x;putchar('-');}
	if(x>9) write(x/10);
	putchar(x%10+48);
	return;
}

//Lu某同學要的結構體排序 
#include<algorithm>
struct node{
	int x,b,gezhongdongxi;
}a[N];
bool cmp(node x,node y)
{return x.x>y.x;}
//根據x從大到小排序 
void sort_MB()
{
	sort(a+1,a+1+n,cmp);
	//從1~n排序 
}

//gcd(求最大公約數)模版
int gcd(int a,int b)
{
	if(!b) return a;
	return gcd(b,a%b);
}

//楊輝三角遞推
void ycl_get()//預處理 
{
	c[0][0]=1;
	for(int i=1;i<=N;i++)
	  for(int j=1;j<=N;j++)
	    c[i][j]=c[i-1][j]+c[i-1][j-1];
}
//求組合數(配合上面使用) 
int get_C(int x,int y)
{return c[x+1][y+1];}

//隨機l~r的數字
#incldue<cstdlib>
#define random(l,r) l+rand()%(r-l+1)

//對拍程式模版(選學)
#include<windows.h>
#include<ctime>
void dp()//dp==對拍 
{
	while(1)
	{
		system("data.exe");//執行隨機程式 
		system("BL.exe");//執行暴力
		double st=clock(); 
		system("MPY.exe");//執行(偽)正解 
		double ed=clock();
		if(system("fc data.ans data.out")){
		    printf("傻逼了吧,你的(偽)正解WA了");
		    return;
		}
		else
		  printf("(暫時)AC time:%0.2lf ms",ed-st); 
	}
}

//algorithm庫的騷操作
#include<algorithm>
void std()
{
	wz=lower_bound(a+1,a+1+n,x)-(a+1)
	//在a陣列中查詢x的位置(如果不存在,返回前面那個數的位置),返回到wz
	m=unique(a+1,a+1+n)-(a+1);
	//將a陣列去重(要求a陣列已經排好序),剩下的元素個數返回到m
	fill(a+1,a+1+n,x);
	//將a陣列下標為1..n的都賦值為x,類似memset,但可以限制範圍
	//如若要清空n*m的二維陣列,格式如下
	fill(a[1]+1,a[n]+1+m,0);
	//不過推薦你們還是用memset清空好,不容易錯
	//但這種方法對於不是清0的時候很好用! 
}

//other騷操作
void sao()
{
	for(register int i=1;i<=n;++i)
	//++i比i++快, 迴圈變數前加register會更快
	a<<b//a*(2^b)快速運算
	putchar();//用putchar()輸出單個字元更快
	//用字元陣列處理比字串會優秀 
	//更多的詳見你們學長的部落格
	//https://blog.csdn.net/xuxiayang/article/details/81021585 
	//——to be continue 
}

//輸出陣列記憶體
printf("%.3f M\n",(double)sizeof(a)/(1<<20));
printf("%.3f K\n",(double)sizeof(a)/(1<<10));

//(你們)常用的標頭檔案
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
//以下的最好不要放在要交的程式裡 
#include<cstdlib>
#include<ctime> 
//以下的千萬不要放在要交的程式裡
#include<windows.h> 
//前面帶"__"的函式不可以用 

可能有些寫錯了(反正我也沒編譯過)。
不會的來問我。


注意事項

之後是來自菜雞學長的一些提醒

  1. 做不出來題目心態不要爆炸,反正你做不出來別人也做不出來
  2. 不會的就暴力,暴力出奇跡
  3. 上面的板子都背好,總會有用的
  4. 標頭檔案起碼檢查10遍以上(特別是Wu同學)
  5. 記得看要不要用long long
  6. 第四題你們應該都是做不出來的,水個幾十分就好了
  7. 前2題一定要對,不然你基本涼了╮(╯_╰)╭
  8. 寫大模擬題的時候我推薦你們給自己的程式碼加註釋

經歷分享

//以下是wyc去年第3題的程式

while (true)
{
    if (x+1==n && y==n && color[n][n]==c || x==n && y+1==n && color[n][n]==c || x==n && y==n) break;
    else if (x+1==n && y==n && color[n][n] || x==n && y+1==n && color[n][n]) {money++; break;}
    else if (x+1==n && y==n || x==n && y+1==n) {money+=2; break;}
    else if (color[x][y+1]==c) y++;
    else if (color[x+1][y]==c) x++;
    else if (color[x-1][y]==c) x--;
    else if (color[x][y-1]==c) y--;
    else if (color[x][y+1
            
           

相關推薦

NOIP普及板子注意事項wyc&amp;&amp;xxy禮物

轉載至:xxy https://blog.csdn.net/xuxiayang/ 和 wyc https://blog.csdn.net/mr_wuyongcong/ 板子們 //01揹包模版 #include<cstdio> using namespace std

重灌系統後,重新安裝ORACLE加環境變數配置、客戶端PL/SQL的安裝過程,注意事項避免再次踩坑

(1)首先了解什麼是OERACLE及Oracle與PL/SQL是什麼關係: ORACLE是資料庫,有客戶端和伺服器; PLSQL Developer只是第三方工具,服務於ORACLE,類似的工具還有Toad,sqlplus,sql developer等等; 安裝PLSQL Developer

JavaScript之ES6中解構原理注意事項陣列和物件

//ES6中的解構原理(常用型別):   //陣列解構: //陣列的元素是按次序排列的,變數的取值由它的位置決定; let [a,b,c] = [1,2,3]; console.log(a,b,c) //結果為: 1,2,3;   //物件解構變數同名(

將 Spring boot 專案打成可執行Jar包,相關注意事項main-class、缺少 xsd、重複打包依賴

最近在看 spring boot 的東西,覺得很方便,很好用。對於一個簡單的REST服務,都不要自己部署Tomcat了,直接在 IDE 裡 run 一個包含 main 函式的主類就可以了。 但是,轉念一想,到了真正需要部署應用的時候,不可能通過 IDE 去部署

sql查詢語句的書寫順序、執行順序注意事項優化策略

查詢中用到的關鍵詞主要由6個,分別是:select、from、where、group by、having、order by書寫順序:順序與上一行一致。不過其中select和from為必須,其他關鍵詞是可選執行順序:from、where、group by、having、sele

ansible安裝k8s步驟注意事項線上安裝

以下步驟都經本人實測,可以完美執行。官方參考網址:https://github.com/gjmzj/kubeasz/Ansible瞭解ansible是個什麼東西呢?官方的title是“Ansibleis

android APP整合系統詳細步驟注意事項amlogic平臺

此說明用於amlogic平臺整合不簽名的apk。(如何判斷整合的apk需不需要簽名。簡單來說使用U盤安裝後,能正常開啟使用的就可以不簽名方式整合。) 各平臺的檔案系統有差異,但整體大同小異。其他平臺

ansible安裝k8s步驟注意事項離線安裝

依賴包網址:1.在所有部署節點上搭建私有yum源①新建mkdir/media/Packages複製ansible_offline_Packages下的所有rpm到yum源目錄下/mdeia/Packages。②上傳createrepo包,使用rpm命令手動安裝createre

博弈論noip普及2010第四題 三國遊戲

三國 勝利 沒有 blog hang max efi () turn 小涵很喜歡電腦遊戲,這些天他正在玩一個叫做《三國》的遊戲。 在遊戲中,小涵和計算機各執一方,組建各自的軍隊進行對戰。遊戲中共有 N 位武將(N為偶數且不小於 4),任意兩個武將之間有一個“默

noip普及2013 車站分級luogu P1983

eof 矩陣 oid har 一個 org pac 題目 style 原題鏈接:https://www.luogu.org/problem/show?pid=1983 題目大意:每個車站有一個權值,每一車次始發站與終點站之間如果有不停靠的點,那麽它的權值一定比停靠的點的權值

【C++】向量vector 基本使用方法注意事項

介紹: 向量(Vector)是一個封裝了動態大小陣列的順序容器(Sequence Container)。跟任意其它型別容器一樣,它能夠存放各種型別的物件。可以簡單的認為,向量是一個能夠存放任意型別的動態陣列。 特點: 1.順序序列 順序容器中的元素按照嚴格的線性順序排序。可以通過元素

分享知識-快樂自己:Struts2動態方法、動態結果、萬用字元、方法內部跳轉、action跳轉、OGNL 的使用注意事項

這裡主要以案例演示:涵蓋以下知識點 1、動態方法呼叫:使用關鍵 符號 ! 進行操作   例如:/名稱空間 ! 方法名 2、動態結果集:就是說,通過後臺返回的結果 ${} 獲取,重定向到符合預期的頁面。 3、萬能萬用字元:*_*  :第一個 * 為 類名、第二個 * 為方

elasticsearchjava 使用批量操作bulk注意事項

1,BulkRequest物件可以用來在一次請求中,執行多個索引、更新或刪除操作     且允許在一次請求中進行不同的操作,即一次請求中索引、更新、刪除操作可以同時存在 BulkRequest bulkRequest = new BulkRequest(); bulk

實戰Java高併發程式設計四、鎖的優化注意事項

在多核時代,使用多執行緒可以明顯地提升系統的效能。但事實上,使用多執行緒會額外增加系統的開銷。對於單任務或單執行緒的應用來說,其主要資源消耗在任務本身。對於多執行緒來說,系統除了處理功能需求外,還需要維護多執行緒環境特有的資訊,如執行緒本身的元資料,執行緒的排程,執行緒上下文的切換等。 4.1有

NOIP考試技巧注意事項&amp;&amp;資訊競賽常用函式/模板

OI 中轉站 OI演算法大全 [NOIP提高組(2018)考試技巧及注意事項] (https://blog.csdn.net/hi_ker/article/details/81181615) 1.保持好的心態 2.審題 3.考慮嚴謹 4.程式碼正確 5

ORACLE分割槽表梳理系列- 分割槽表概述、分類、使用方法注意事項

前言 本文著重闡述分割槽表的概念、優勢,以及常用分割槽表的使用方法及使用過程中的注意事項。 對於分割槽表的日常維護方法,如:索引的維護、分割槽的合併等,將在後續文章中再詳細介紹。 本文涉及的相應演示,使用的資料庫版本為oracle 11.2.0.4。 本文常用分割槽表的使

《連載 | 物聯網框架ServerSuperIO教程》- 5.輪詢通訊模式開發注意事項。附:網友製作的類庫說明CHM

目       錄 5. 輪詢通訊模型開發及注意事項... 2 4.1           概述... 2 4.2           通訊機制說明... 2 4.3           裝置驅動開發注意事項... 3 4.3.1    實時傳送資料... 3 4.3.2