33,008
社区成员
发帖
与我相关
我的任务
分享
#include<stdio.h>
#define MAXN 5000
int value[] = {5,10,20,50,100,200,500,1000,2000,5000};
int main()
{
float money;
int m,i,j;
int c[MAXN+1];
for (i = 0;i <= MAXN;i+=5) c[i] = 1;
for (i = 1;i < 10;i++)
{
for (j = value[i];j <= MAXN;j+=5)
c[j] += c[j - value[i]];
}
while(scanf("%f",&money))
{
if (money == 0.00) break;
m = (int)(money * 100);
printf("%5.2f%12d\n", money, c[m]);
}
return 0;
}
//顺便贴个AC的代码
//呵自己多学习,可以先做1865这个题
#include <stdio.h>
#include <math.h>
#define MAX 10
long it[1001][MAX+1];
int ss[MAX+1] = {0,1,2,4,10,20,40,100,200,400,1000};
void Init()
{
int i;
for (i = 1; i <= MAX; ++i)
it[1][i] = 1;
for (i = 2; i <= 1000; ++i)
{
int j;
for (j = 1; i > ss[j]; ++j)
it[i][j] = it[i][j-1]+ it[i-ss[j]][j];
if (i == ss[j]) it[i][j] = it[i][j-1]+1;
else it[i][j] = it[i][j-1];
for (++j; j <= MAX; ++j)
it[i][j] = it[i][j-1];
}
}
int main(void)
{
float f;
Init();
while (scanf("%f", &f) == 1 && fabs(f) > 1e-2)
{
int pos = (int)(f * 100) / 5;
printf("%5.2f%12d\n",f, it[pos][10]);
}
return 0;
}
// changes.cpp : Defines the entry point for the console application.
//
/////////////////////////////////////
// by Enzo Yang
////////////////////////////////////
#include "stdafx.h"
#include "stdlib.h"
#include <vector>
#include <time.h>
#include <iostream>
using namespace std;
typedef struct tag_dic
{
int hash;
int value;
} dic;
int getMethods(int,int);
bool hasThisHash(int,int*);
vector<dic> vdHashTable;
int nChanges[] = {10000,5000,2000,1000,500,200,100,50,20,10,5};
int _tmain(int argc, _TCHAR* argv[])
{
int nWhole = 8000;
int res;
//////////////////////////////////////////
clock_t start, finish;
start = clock();
////////////////////////////////////////
if(nWhole % 5 == 0)
{
res = getMethods(0,nWhole);
}
else
{
res = 0;
}
cout << res << endl;
//////////////////////////////////////////
finish = clock();
cout << (double)(finish - start)<< endl; ;
//////////////////////////////////////////
system("pause");
return 0;
}
int getMethods(int nPosition,int nLeft)
{
if(nLeft < 0)
return 0;
if(nLeft == 0)
return 1;
if(nPosition == 10)
return 1;
int hash = nPosition * 1000000 + nLeft;
int nWhere;
if(hasThisHash(hash,&nWhere))
return vdHashTable[nWhere].value;
int res = getMethods(nPosition + 1,nLeft) + getMethods(nPosition,nLeft - nChanges[nPosition]);
dic dItem = {hash,res};
vdHashTable.push_back(dItem);
return res;
}
bool hasThisHash(int hash,int *pnWhere)
{
int length = vdHashTable.size();
for(int i = 0; i < length; i++)
{
if(vdHashTable[i].hash == hash)
{
*pnWhere = i;
return true;
}
}
return false;
}