HDU 3348 coins 贪心
2011-08-12 16:26
357 查看
该题分别给出面值为1,5,10,50,100的纸币数,求出,表示一个值的最少所需的纸币数,最多所需的纸币数。
先贪心出最少的情况,怎样取得最小的,我们每次取币值最大,跟价钱比较,如果价钱大于币值,我们一定用币值大的,下面取得最小的,我们因该从刚满足我们价钱的最大的币值开始取,那么我们每次下去一定取得的数目是最大的,
先贪心出最少的情况,怎样取得最小的,我们每次取币值最大,跟价钱比较,如果价钱大于币值,我们一定用币值大的,下面取得最小的,我们因该从刚满足我们价钱的最大的币值开始取,那么我们每次下去一定取得的数目是最大的,
#include<stdio.h> #include<stdlib.h> #include<string.h> int minnumber( int a[], int num[], int price, int sum[] ) { int ans=0; for( int i=5;i>1; i-- ) { if( price>=num[i]*a[i] )// 取币值最大的 { ans+=num[i]; price-=num[i]*a[i]; } else { ans+=price/a[i]; price%=a[i]; } } if( price<=num[1] ) return ans+price; return -1; } int maxnumber( int a[],int num[], int price, int sum[] ) { int ans=0; for( int i=5; i>1; i-- ) { if( price<=sum[ i -1 ] )//取币值最小的 continue; else { int t=( price - sum[i-1] )/a[i]+(( ( price - sum[ i-1 ] )%a[i] )? 1 : 0); ans+=t; price=price-t*a[i]; } } if( price> num[1] ) return -1; return ans+price; } void DP( int a[], int num[], int price ) { int sum[6]={0}; sum[1]=num[1]; for( int i=2; i<=5 ;i++ ) { sum[i]=sum[i-1]+a[i]*num[i]; } int min=minnumber( a, num,price,sum ); if( min==-1 ) printf( "-1 -1\n" ); else { int max=maxnumber( a, num , price , sum ); if( max!=-1 ) printf( "%d %d\n",min, max ); else printf( "-1 -1\n" ); } } int main() { int num[6],price,n,a[6]={0,1,5,10,50,100}; scanf( "%d",&n ); for( int i=1; i<=n; i++ ) { int sum=0; scanf( "%d",&price ); for( int j=1; j<6;j++ ) { scanf( "%d",&num[j] ); sum+=a[j]*num[j]; } if( sum>=price ) DP( a,num ,price); else printf( "-1 -1\n" ); } return 0; }
相关文章推荐
- HDU 3348 coins 最小化纸币数量贪心,和最大化纸币数量贪心
- HDU 3348 coins 贪心 最少/最多硬币问题
- hdu 3348 coins(贪心)
- HDU 3348 coins【贪心】
- coins(hdu 3348 贪心 + 多重背包)
- 贪心 逆向思维 HDU 3348 coins
- hdu 3348 (数学+贪心)
- hdu 3348 coins
- Hdu 5718 Oracle【贪心】
- HDU 1257 最少拦截系统 【坑题,贪心,LIS】
- hdu 3466 Proud Merchants(贪心+DP)
- HDU 3697 Selecting courses (贪心)
- HDU 2844-Coins(多重背包)
- HDU - 5773 贪心 + LIS
- hdu 题目2034(水题),2036(水,简单计算多边形面积),2037(水,贪心,会场安排类)
- HDU 4912 Paths on the tree LCA 排序贪心
- HDU——1009FatMouse' Trade(贪心+结构体+排序)
- HDU 2570 迷障【贪心+数学题】
- hdu 5802 Windows 10(2016 Multi-University Training Contest 6——贪心+dfs)
- HDU 5938 Four Operations 【贪心】(2016年中国大学生程序设计竞赛(杭州))