codeforces Wooden Fence 简单DP
2013-02-01 10:09
369 查看
题意:给你N种模板,题中规定了几个要求,要求搭长度为l的墙,问有几种搭法(所谓不同就是抽象之后的墙中每种墙的排列方式不同)。
做法:首先增加木板,把竖着放和横着放的木板当成两种,但这只限于a,b不同的木板,然后在建立数组mp,因为碍于题意,竖着和横着的木板其实是同一种木板,然后建立状态dp[i][j],长度为i的墙的最后是第j种木板。
做法:首先增加木板,把竖着放和横着放的木板当成两种,但这只限于a,b不同的木板,然后在建立数组mp,因为碍于题意,竖着和横着的木板其实是同一种木板,然后建立状态dp[i][j],长度为i的墙的最后是第j种木板。
#include <iostream> #include <cstdio> #include <cstring> #define LL long long const LL mod=1000000007; const int LMT=3003; using namespace std; LL dp[LMT][204],tem[204],rec[204][2],mp[204]; int main() { int n,l,sz; LL ans=0; scanf("%d%d",&n,&l); sz=n; memset(mp,-1,sizeof(mp)); for(int i=0;i<n;i++) { scanf("%I64d%I64d",&rec[i][0],&rec[i][1]); if(rec[i][0]!=rec[i][1]) { rec[sz][0]=rec[i][1]; rec[sz][1]=rec[i][0]; mp[sz]=i; mp[i]=sz; sz++; } } n=sz; for(int i=0;i<n;i++) { dp[rec[i][0]][i]=1; dp[0][i]=1; } for(int i=1;i<=l;i++) for(int j=0;j<n;j++) for(int t=0;t<n;t++) if(j!=t&&mp[j]!=t&&i>rec[j][0]&&rec[t][1]==rec[j][0]) { dp[i][j]+=dp[i-rec[j][0]][t]; dp[i][j]%=mod; } for(int j=0;j<n;j++) { ans+=dp[l][j]; ans%=mod; } printf("%I64d\n",ans); return 0; }
相关文章推荐
- codeforces Gym 100500H A. Potion of Immortality 简单DP
- Codeforces Round #302 (Div. 2) C 简单dp
- 【Codeforces Round 363 (Div 2) C】【简单DP】Vacations 一天运动 一天学习最少休息日数
- 【Codeforces Round 367 (Div 2) C】【简单DP】Hard problem
- Codeforces Round #343 (Div. 2) C. Famil Door and Brackets(简单dp)
- Codeforces Round #272 (Div. 2) B Dreamoon and WiFi(简单DP)
- codeforces CodeForces 204A Little Elephant and Interval (数位dp简单)
- codeforces Manthan, Codefest 17 B.Marvolo Gaunt's Ring (简单dp)
- codeforces Gym 100500Problem H. ICPC Quest 简单DP
- Codeforces Round #260 (Div. 1) A. Boredom (简单dp)
- Codeforces Round #267 (Div. 2)D(DFS+单词hash+简单DP)
- Codeforces Round #294 (Div. 2) D. A and B and Interesting Substrings [dp 前缀和 ]
- Codeforces Gym 100015F Fighting for Triangles 状态压缩DP
- Codeforces Round #401 (Div. 2) A B C 水 贪心 dp
- codeforces C. Painting Fence
- Codeforces Round #129 (Div. 1) (各种好dp)
- Codeforces Round #274 Div.1 C Riding in a Lift --DP
- codeforces Cthulhu 简单图论
- Codeforces Round #119 (Div. 2) Cut Ribbon(DP)
- Codeforces Round #284 (Div. 2): D. Name That Tune(概率DP)