Description
将数字N进行拆分.拆分出来的数字可以重复使用.
Format
Input
每一行给出一个数字N,3<=N<=500.整个测试以0代表结束.
Output
拆分的种数.
这道题,看似变态难写,实则。。。
一道******题。
(观众:哇。。。。。。)
这题是个简简单单的dp!
N就是背包容量,但是物品体积在哪捏???
就是1~n的每个数嘛。。。。。。
解决这些问题后,就简单了!
tip:十年OI一场空,开了 long long 见祖宗!!!一定得开 unsigned long long!
点击查看代码
#include<bits/stdc++.h>
#define rep(i,a,b) for(long long i=a;i<=b;i++)
#define pep(i,a,b) for(long long i=a;i>=b;i--)
#define debug(a) cout<<#a<<"="<<a<<endl;
using namespace std;
unsigned long long n;
unsigned long long dp[505];
int main()
{
while(cin>>n&&n!=0)
{
memset(dp,0,sizeof(dp));
dp[0]=1;
rep(i,1,n)
{
rep(j,i,n) dp[j]+=dp[j-i];
}
cout<<dp[n]<<endl;
}
return 0;
}