(2), 關於register(提高速度)
儲存型別說明符 register要求變數儲存在cpu暫存器中,所以不能用取位址符& 取其位址,並且,在全域性變數的地方不能出現register 防止儲存型別不唯一引起的衝突。
同時,register 變數必須是能被cpu暫存器所接受的型別。這就意味著,register 必須是乙個單個的值,且長度應小於等於整型長度。
例題九:
小zc現在有三個字串,他想知道前兩個字串能不能生成第三個字串,生成規則如下:第乙個串的每個字元都可以往第二個串的任意位置插入(包括首尾位置),但必須保證**於第乙個串中的字元在生成後的串中的相對順序不可以改變。
舉個例子:
string a: cu
string b: mt
那麼,a和b可以生成的所有字串是,而不能生成ucmt,因為uc**於a串,但改變了a中字元原來的相對順序。
但小zc覺得這個問題太簡單,於是他想讓你計算對於給定的a, b, c串,共有多少種方案能夠生成c串。方便起見,你只需要輸出最後答案對1000000007取模的值。
這題題意不難理解,老師說作業不難,可......總算做出來了
#include#include#includeusing namespace std;
typedef long long ll;
const int mod=1e9+7;//求模
const int n=3000;
int l1,l2,l3,dp[n][n] ;//dp陣列表示已經匹配了s1的前i個字元,s2的前j個
char s1[n],s2[n],s3[n*2];
void go()
for(i=1;i<=l2;i++)
for(i=1;i<=l1;i++)
if(s2[i]==s3[i+1])}}
cout<>t;
while(t--)
return 0;
}
例題十:
線段覆蓋
數軸上有n條線段,線段的兩端都是整數座標,座標範圍在0~1000000,每條線段有乙個價值,請從n條線段中挑出若干條線段,使得這些線段兩兩不覆蓋(端點可以重合)且線段價值之和最大。n<=1000
輸入描述 input description第一行乙個整數n,表示有多少條線段。
接下來n行每行三個整數, ai bi ci,分別代表第i條線段的左端點ai,右端點bi(保證左端點《右端點)和價值ci。
輸出描述 output description輸出能夠獲得的最大價值
樣例輸入 sample input3
1 2 1
2 3 2
1 3 4
樣例輸出 sample output4
#include#include#include#includeusing namespace std;
int res;
int dp[1010];
struct ff
a[1010];
bool cmp(ff x,ff y)
sort(a+1,a+t+1,cmp);
memset(dp,0,sizeof(dp));
res=0;
for(i=2;i<=t;i++)
dp[i]=maxm+a[i].c;
res=max(res,dp[i]);}}
cout《例題十一:
尼克的任務
尼克每天上班之前都連線上英特網,接收他的上司發來的郵件,這些郵件包含了尼克主管的部門當天要完成的全部任務,每個任務由乙個開始時刻與乙個持續時間構成。
尼克的乙個工作日為n分鐘,從第一分鐘開始到第n分鐘結束。當尼克到達單位後他就開始幹活。如果在同一時刻有多個任務需要完成,尼克可以任選其中的乙個來做,而其餘的則由他的同事完成,反之如果只有乙個任務,則該任務必需由尼克去完成,假如某些任務開始時刻尼克正在工作,則這些任務也由尼克的同事完成。如果某任務於第p分鐘開始,持續時間為t分鐘,則該任務將在第p+t-1分鐘結束。
寫乙個程式計算尼克應該如何選取任務,才能獲得最大的空暇時間。
輸入格式
輸入資料第一行含兩個用空格隔開的整數n和k(1≤n≤10000,1≤k≤10000),n表示尼克的工作時間,單位為分鐘,k表示任務總數。
接下來共有k行,每一行有兩個用空格隔開的整數p和t,表示該任務從第p分鐘開始,持續時間為t分鐘,其中1≤p≤n,1≤p+t-1≤n。
輸出格式
輸出檔案僅一行,包含乙個整數,表示尼克可能獲得的最大空暇時間。
輸入 15 6
1 21 6
4 11
8 58 1
11 5
輸出
4今天做的題目可能題目理解上來說都不是很難,比較好理解,但是我還是覺得思維量很大,可能如果老師不講我自己也想不明白,說實話吧,講了我也沒明白,
所以現在是在看回放一題一題整理呢
用dp[i] 表示i~n 最大空閒時間
dp[i] 等於dp[i+任務時長]
欲知dp[i+任務時長] 的值->則需要倒序遞推從n~1
假設i時刻為空閒狀態,則有兩種情況
1. 當前時間點無任務開始
dp[i] = dp[i+1] +1;
2. 當前時間點有任務開始
dp[i]=max(dp[i+任務時長],dp[i])
#includeusing namespace std;
int n,k;
struct node
n[10001];
int dp[10005];
bool cmp(node x,node y)
mapmp;
int main()
int now=0;
sort(n,n+n,cmp);
for(i=k;i>=1;i--)
,她想知道其中有多少個子序列(1 ≤ m ≤ n, 1 ≤ p1 < p2 ,..., < pm ≤ n),滿足對於所有的i,j(1 ≤ i < j ≤ m), apipj < apjpi成立。
輸入描述:
第一行乙個整數n (1≤n≤100)表示序列長度。
接下來一行n個整數(1≤ai≤100)表示序列。
輸出描述:
輸出一行表示滿足條件的子串行的數目。因為答案可能很大,請輸出答案mod 1,000,000,007。
設dp[i]表示以第i個數結尾的滿足條件的子串行的個數,然後全加在一起就是答案。
例如輸入
21 2輸出3
滿足條件的子串行為,,。
#includeusing namespace std;
#define mod 1000000007
int a[105],flag[105][105];
long long dp[105],ans;
int main()
for(i=1;i<=n;i++)
ans=(ans+dp[i])%mod;
cout《例題十三:
#includeusing namespace std;
int f[1005][1005],n,a[1005],ans;
int main()
{ cin>>n;
for(register int i=1;i<=n;i++)//暫存器型別,提高速度
cin>>a[i];
f[0][0]=0;
for(register int i=1;i<=n;i++)
for(register int j=0;j<=i;j++)
{f[i][j]=f[i-1][j-1];
if(a[i]==i-j&&f[i][j]三:感想
與他們相比,我們面對一點一點學習的壓力又算得了什麼?幾道題不會又算得了什麼?
總結第六周
這一周從時間意義上也算是國慶假期後的第一周,學弟學妹也正式踏入了校園,我們工作室的招新工作也相繼展開,截止到此時此刻,還有資料專業和物聯專業的學弟學妹沒有來到我們工作室進行參觀,這兩天也挺累的,但也從中收穫到了許多東西,比如 在人多的時候講話可以更淡定一點,沒有那麼緊張 跟學弟學妹交流用怎樣的方式更...
第六周總結
這週呢,雖然完成了地鐵的測試,面勉強強過關了,但是我總覺得如果我不完善一下的話,會對不起自己的苦勞,所以我就繼續完善了一下。完成了地鐵的展示,其實心裡還是有一絲小激動的。老師說我們的注釋寫的不錯,這個,嗯,值得發揚光大。本週主要是繼續完善地鐵售票系統,因為以前寫的bug還是很多的,還有演算法的完善,...
第六周總結
1第六周實驗的內容 1 根據下面的要求實現圓類circle。1.圓類circle的成員變數 radius表示圓的半徑。2.圓類circle的方法成員 circle 構造方法,將半徑置0 circle double r 構造方法,建立circle物件時將半徑初始化為r double getradius...