NIT 1048

来源:互联网 发布:软件招聘网 编辑:程序博客网 时间:2024/06/07 00:06

                                                                                三个师妹之点菜


Time limit: 1000MS    Memory limit: 32768K 
Total Submit: 985    Accepted: 232 

sharp有三个师妹.这个三个师妹很喜欢捉弄sharp.一天sharp请她们三个去东裕吃川菜去了.她们仨点菜 ,当然她们这次不会放过sharp的,而且她们知道sharp这次身上带了1024元钱,所以她们决定点尽量多的 菜,让sharp付尽量多的钱,当然每道菜她们只点一次,而且她们点的菜钱总和不会大于1024元,因为超出 了sharp付钱的时候发现不够会叫她们三个付多出来的部分的.

第一行输入一个N,下面有N种情况(1< N < 16). 每种情况的第一个行为M,代表有多少种川菜.接下来的M行是每一种川菜的价格.价格都是整数(1<= M <= 128),并且价格不会大于1024的. sharp身上永远只带1024元钱.

输出共N行. 每行输出sharp最多要付多少钱.

Sample Input

22256443512400400

Sample Output

300912
简单的背包题,但也是我第一次写背包的题。要继续努力,从简单开始!
AC code:
#include<stdio.h>
#include<string.h>
int main()
{
int i,j,n,d,m,money[1025];
while(scanf("%d",&n)==1)
{
while(n--)
{
memset(money,0,sizeof(money));
scanf("%d",&m);
for(i=0;i<m;i++)
{
scanf("%d",&d);
for(j=1024;j>=d;j--)
if(money[j-d]+d>money[j])//状态转移条件,判断加入这么多钱后是否大于不加入.
money[j]=money[j-d]+d;
}
printf("%d\n",money[1024]);
}
}
return 0;
}