33,008
社区成员
发帖
与我相关
我的任务
分享
#include<stdio.h>
int main()
{
int p1,p2,p3,p4,p5,p6;//分别表示1分2分5分1角2角5角
int n=100//n为1元
for(p2=0;p2<=n/2;p2++)
for(p3=0;p3<=(n-2*P2)/5;p3++)
for(p4=0;p4<=(n-2*p2-5*p3)/10;p4++)
for(p5=0;p5<=(n-2*p2-5*p3-10*p4);p5++)
for(p6=0;p6<=(n-2*p2-5*p3-10*p4-20*p5)/50;p6++)
{
p1=n-(2*p2+5*p3+10*p4+20*p5+50*p6);
if(p1>=0)
{
printf("1分=%d\t2分=%d\t5分=%d\t1角=%d\t2角=%d\t5角=%d\t",p1,p2,p3,p4,p5,p6);
}
}
return 0;
}
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
int DP[251][7];
int save[7] = {1,2,5,10,20,50,100};
int DFS(int num,int step)
{
while(step>0 && num<save[step]) step--;
if(DP[num][step] == 0)
DP[num][step] = DFS(num,step-1) + DFS(num-save[step],step);
return DP[num][step];
}
int main()
{
int i,j;
memset(DP,0,sizeof(int)*251*7);
for(i = 0; i<= 6;i++)DP[0][i] = 1;
for(i = 0; i<= 250;i++)DP[i][0] = 1;
// freopen("test.txt","w",stdout);
for(i = 1;i<=250;i++)
{
for(j = 6;j>=0;j--)
if(i>=save[j])
break;
DFS(i,j);
printf("%d %d\n",i,DP[i][j]);
}
return 0;
}
vector<int> vec;
int fDP(int left)
{
int cnt = 0;
if(left-50 >= 0)
{
if(vec[left-50] == -1)
vec[left-50] = fDP(left-50);
cnt += vec[left-50];
}
//下面累计20,10等
return cnt;
}
void fCaller()
{
vec.resize(101);
for(int i=0; i<vec.size(); ++i) vec[i] = -1;
for(int i=0; i<=100; ++i)
{
fDP(i);
}
int cnt = vec[100];
}
int f(int left)
{
if(left < 0)
return 0;
if(left == 0)
return 1;
int cnt = 0;
cnt += f(left - 50);
cnt += f(left - 20);
cnt += f(left - 10);
cnt += f(left - 5);
cnt += f(left - 2);
cnt += f(left - 1);
return cnt;
}
void main()
{
int cnt = f(100);
}