1. 程式人生 > 實用技巧 >簡單dp水題

簡單dp水題

#include <bits/stdc++.h>
using namespace std;
#define limit (100 + 5)//防止溢位
#define INF 0x3f3f3f3f
#define inf 0x3f3f3f3f3f
#define lowbit(i) i&(-i)//一步兩步
#define EPS 1e-6
#define FASTIO  ios::sync_with_stdio(false);cin.tie(0);
#define ff(a) printf("%d\n",a );
#define pi(a,b) pair<a,b>
#define
rep(i, a, b) for(ll i = a; i <= b ; ++i) #define per(i, a, b) for(ll i = b ; i >= a ; --i) #define MOD 998244353 #define traverse(u) for(int i = head[u]; ~i ; i = edge[i].next) #define FOPEN freopen("C:\\Users\\tiany\\CLionProjects\\acm_01\\data.txt", "rt", stdin) #define FOUT freopen("C:\\Users\\tiany\\CLionProjects\\acm_01\\dabiao.txt", "wt", stdout) #define
debug(x) cout<<x<<endl typedef long long ll; typedef unsigned long long ull; inline ll read(){ ll sign = 1, x = 0;char s = getchar(); while(s > '9' || s < '0' ){if(s == '-')sign = -1;s = getchar();} while(s >= '0' && s <= '9'){x = (x << 3) + (x << 1
) + s - '0';s = getchar();} return x * sign; }//快讀 void write(ll x){ if(x < 0) putchar('-'),x = -x; if(x / 10) write(x / 10); putchar(x % 10 + '0'); } int n,m; const int mod = 1000007; int dp[limit][limit];//總數是多少 int a[limit]; int main() { #ifdef LOCAL FOPEN; #endif n = read(),m = read(); rep(i,1,n){ a[i] = read(); } dp[0][0] = 1; rep(i,1,n){ rep(j,0,a[i]){ rep(k,0,m){ if(k - j < 0)continue; dp[i][k] += dp[i - 1][k - j]; dp[i][k] %= mod; } } } ll ans = dp[n][m] % mod; write(ans); return 0; }

最近事情也挺多的,刷題也基本停止了。今天才開始繼續刷的。老媽說我這幾天做了好幾次噩夢,都是睡覺的時候突然驚呼“太難了!”。

希望有時間能夠準備gre,orz,都十月了!搞完手頭的就去gre,下週開始準備,週三之前買書(flag++)。

祝WeepingDemon和Oak_limy以及所有初賽er rp++

大學課業太多單身三年了,求求這些教授有點人性批點時間給我談個戀愛吧orz

畢~