#include<bits/stdc++.h> #define INF 0x3f3f3f3 #define maxn 100100 typedeflonglong ll; usingnamespacestd; #define rep(i, n, args...) for (ll i = 0, ##args; i < n; i++) #define repr(i, s, e, args...) for (ll i = s, ##args; i < e; i++) #define erg(i, u, args...) for (ll i = vtx[u], ##args; ~i; i = eg[i].nxt) #define fulset(x, v) memset(x, v, sizeof(x)); int ans,n,k; voiddfs(int la,int sum,int le) { if (le == k) { if (sum==n) ans++; return; } for (int i=la;sum+i*(k-le)<=n;i++) dfs(i,sum+i,le+1); } intmain() { while (cin >> n >> k) { ans=0; dfs(1,0,0); cout << ans << endl; } }
E002 闪避湖泊
Problem Description
农夫约翰的农场在最近的一场暴风雨中被水淹没。但保险公司仅根据他得农场中最大的“湖泊”的大小赔偿一个数额。 农场可表示为N行M列的长方形网格,(1 ≤ N ≤ 100,1 ≤ M ≤ 100)。网格中的每个单元或是干的或是被淹没的,且恰有K个单元被水淹没,(1 ≤ K ≤ N*M)。正如人们所希望的,湖泊是一个中间单元,它与其他的单元共享一条长边(不是角落)。任何与中间单元共享一条长边或者与连通单元共享一条长边的单元是一个连通单元,是湖泊的一部分。