//本题题意:有m个人,无数个房间,每个房间至少为5人,求一共有多少分配方案
//转化成能取无数次的硬币问题或者完全背包问题.
//1.转化成硬币找零问题:有5……m面额的硬币,每个硬币取的次数不受限制,求组成一个面额为m的方案个数.
//2.转化成完全背包问题:背包大小为m,物品依次为5……m的,每个物品取的次数不受限制,求这些物品刚好放满背包的方案数.
#include <stdio.h>
#include <iostream>
#include <memory.h>
using namespace std;
int dp[105];
int main()
{
int n;
while(cin >> n && n != 0)
{
memset(dp,0,sizeof(dp));
dp[0] = 1;
for(int i = 5;i <= n;i++)
for(int j = i;j <= n;j++)
{
dp[j] = dp[j] + dp[j - i];//相当于dp[i][j] = dp[i - 1][j] + dp[i - 1][j - i];
}
cout << dp[n] << endl;
}
return 0;
}
sicily 1564.HOUSING
最新推荐文章于 2015-09-24 11:20:25 发布