題目質量不錯。
t1:應該能看出是乙個裸(so easy)的貪心+排序吧?
這裡我們考慮乙個dp,設dp[i][j]表示前i位,使用了j次變換,能獲得的最小距離。
那麼dp[i][j]=min(dp[i-1][j]+abs(n[i]-m[i]),dp[i-1][j-1]+(n[i]==m[i])),還是很好推的。
不過由於資料範圍太太太太小了,所以n^4什麼的dp都可以水過去。
#include#include#include#includeusing namespace std;
const int k=61;
char n[k],m[k];
int k;
int f[k][k];
int main()
printf("%d",f[l][k]);
return 0;
}
t2:乙個找方形聯通塊的問題。至於判bad placement的,我們可以先找到乙個#,然後把這個#向四個方向延伸,
然後在延伸得到的範圍矩形中看看是否有'.',有則肯定是bad,沒有則再將邊界上的#向矩形外擴散乙個單位距離,看看是否還有#,有則肯定也是bad,如果沒有bad,拿個計數器累和一下就行了。
#include#include#includeusing namespace std;
const int n=1010;
const int dx[4]=;
const int dy[4]=;
char a[n][n];
bool vis[n][n];
int n,m,ans=0;
void print()
void bfs(int sx,int sy)
int tx,ty;
for (tx=sx+1;tx<=n;tx++)if (a[tx][sy]=='.')break;else if (vis[tx][sy])print();tx--;
for (ty=sy+1;ty<=m;ty++)if (a[sx][ty]=='.')break;else if (vis[sx][ty])print();ty--;
for (int i=sx;i<=tx;i++)
for (int j=sy;j<=ty;j++)
}int main()
t3:很巧妙的dp,當我們用普通的線性方程dp[i]很好的無法表示方案數時,我們考慮加入乙個維度來表示一些不完美狀態(即不是答案要求的狀態),然後通過這些不完美狀態來進行更方便的相互之間的轉移,和向完美狀態的轉移。這個思想是非常實用的。
對於此題,由於乙個l字型的磚塊,一定會是第一行與第二行產生(或消除)乙個單位磚塊的差距。那麼我們就設dp[i][0]表示第一行與第二行恰好平齊。
dp[i][1]表示第一行比第二行多乙個單位磚塊。
dp[i][2]表示第二行比第一行多乙個單位磚塊。
那麼轉移方程就很好(真的很好寫)寫了(列舉所有的情況就行了)。可以自己思考一下。
#include#include#includeusing namespace std;
const int mod=10000;
const int n=1000100;
int n;
int f[n][3];
int main()
printf("%d",f[n][0]);
}
t4:乙個數學問題。首先我們可以很容易看出,只有2^p個瓶子才能變成乙個瓶子。所以我們考慮將n拆分成不超過k個數字,使得每個數字到第乙個比它大的2的次冪的差的和最小(很繞口)。既然有2的次冪,我們就把n在2進製下考慮。
例如(10000)2=10011100010000
我們考慮乙個貪心策略:直接把n的二進位制的前k-1個1拆分依次出來,那麼這一部分對答案就是沒有貢獻的了。然後直接把第k個1減去第k+1~....個1的和。可以試試,答案就是15808。
我們再想想這個貪心策略為什麼是對的?
首先,如果第1個1我們不直接取走的話,我們一定會對答案產生至少第1個1../2的貢獻,這個貢獻是致命的。因為不論你後面怎麼取,這個答案都會大於第1個1../2,所以我們必須把第1個1直接取走,後面同理。然後把第k+1個1直接補齊到第k個1就行了。
這麼講似乎很模糊,建議自己動手算一算。
#include#include#includeusing namespace std;
int n,k,tot=0;
int a[50];
int main()
小試3解析
確實需要思考。1.傳球 細加分析即可知結果為c 3,n include includeusing namespace std int n int main 2.矩形交換 顯然直接模擬是不可取的。我們可以令a i i,表示第i行是原先的第a i 行 那麼在交換行的時候,我們只需交換對應的a的值即可。i...
OpenCL 4 小試牛刀
前四章已經講了那麼多的概念,下面該真刀真槍地試一試了。下面是宿主機端程式 123 4567 891011 1213 1415 1617 1819 2021 2223 2425 2627 2829 3031 3233 3435 3637 3839 4041 4243 4445 4647 4849 50...
4 反向解析
回到頂部 隨著功能的增加會出現更多的檢視,可能之前配置的正規表示式不夠準確,於是就要修改正規表示式,但是正規表示式一旦修改了,之前所有對應的超連結都要修改,真是一件麻煩的事情,而且可能還會漏掉一些超連結忘記修改,有辦法讓鏈結根據正規表示式動態生成嗎?就是用反向解析的辦法。回到頂部 回到頂部 回到頂部...