題面:
得分情況:
爆零。。。
正解:
我們用dp[n][m][w]表示在n*m的網格中,貪心路徑權值為w的方案數,轉移時列舉向右和向下,時間複雜度o(
h∗w∗
s2) o(h
∗w∗s
2),能過70%的資料。
我們首先可以通過維護字首和去掉乙個s,將複雜度降為o(
h∗w∗
s)o (h
∗w∗s
),然後你還是只能過70%的點。
我們又發現,每次在不是圖的右邊界的位置向下走至少會對答案作出1的貢獻(如果下面格仔的權值為0必定會向右走),所以當走了s步之後必然會來到圖的最右邊,及經過點(s+1,w),所以我們只需要對s*w的格仔做dp,其他的直接轉移即可,總複雜度為o(
w∗s2
) o(w
∗s2)
,可以通過所有資料。
**:
#include
using
namespace
std;
const
int mod=10007,maxn=3000,maxs=110;
int f1[maxn*2][maxs],f2[maxn*2][maxs],f3[maxn*2][maxs];
int fact[maxn<<3],invfact[maxn<<3];
int modpow(int x,int y)
return nowans;
}int calcu(int n,int k)
int sum(int horz,int vert,int forced,int s)
}return nowans;
}int h,w,s,ans;
int main()
f1[i][num]%=mod;
f2[i][num]%=mod;
f3[i][num]%=mod;
}if(min(w,h)==1)
fact[0]=1;
invfact[0]=1;
for(int i=1;i<=w+h+1;i++)
for(int i=0;i<=w-2;i++)
for(int j=0;j<=h-2;j++)
printf("%d\n",ans);
return
0;}
湖北省隊互測2014 乙個人的數論
題意 定義 f n 為所有小於n且與n互質的正整數的d次方之和。給定 d,n prod limits 求 f n 對 10 7 取模的值。d leq 100,w leq 1000,p a leq 10 9 題解 先簡單的整理一下式子,所求式為 f n sum limits sum limits su...
2018SD省隊集訓R1 D1
經過每條邊至少一次並且回到原點,我們可以想到尤拉迴路。發現尤拉迴路的特點是每個點度數為偶數,然後我們的目標就是把度數奇數的那些點通過新增一些長度盡量小的邊變成度數為偶數。新增哪些邊呢?不難想到是最小生成樹上的邊,那我們先新增成最小生成樹,其實就是每條邊可以選 不選,每個點的要求被選的相鄰邊是奇數 偶...
2018SD省隊集訓R2 D2
我們並不需要知道相對應位置的數字是不是相等,只要置換之後的hash值相等就行了。hash 函式本身相當於每個位置乘上 x 的若干次方,置換之後只要改變次方的順序就好了。具體來說,設我們的base值是m,一段區間的hash值是 n i 0s i mi i 0nsi mi,然後乙個置換的hash值是 n...