程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> hdu2126 Buy the souvenirs

hdu2126 Buy the souvenirs

編輯:C++入門知識

hdu2126 Buy the souvenirs


Problem Description When the winter holiday comes, a lot of people will have a trip. Generally, there are a lot of souvenirs to sell, and sometimes the travelers will buy some ones with pleasure. Not only can they give the souvenirs to their friends and families as gifts, but also can the souvenirs leave them good recollections. All in all, the prices of souvenirs are not very dear, and the souvenirs are also very lovable and interesting. But the money the people have is under the control. They can’t buy a lot, but only a few. So after they admire all the souvenirs, they decide to buy some ones, and they have many combinations to select, but there are no two ones with the same kind in any combination. Now there is a blank written by the names and prices of the souvenirs, as a top coder all around the world, you should calculate how many selections you have, and any selection owns the most kinds of different souvenirs. For instance:

\


And you have only 7 RMB, this time you can select any combination with 3 kinds of souvenirs at most, so the selections of 3 kinds of souvenirs are ABC (6), ABD (7). But if you have 8 RMB, the selections with the most kinds of souvenirs are ABC (6), ABD (7), ACD (8), and if you have 10 RMB, there is only one selection with the most kinds of souvenirs to you: ABCD (10).

Input For the first line, there is a T means the number cases, then T cases follow.
In each case, in the first line there are two integer n and m, n is the number of the souvenirs and m is the money you have. The second line contains n integers; each integer describes a kind of souvenir.
All the numbers and results are in the range of 32-signed integer, and 0<=m<=500, 0 Output If you can buy some souvenirs, you should print the result with the same formation as “You have S selection(s) to buy with K kind(s) of souvenirs”, where the K means the most kinds of souvenirs you can buy, and S means the numbers of the combinations you can buy with the K kinds of souvenirs combination. But sometimes you can buy nothing, so you must print the result “Sorry, you can't buy anything.”
Sample Input
2
4 7
1 2 3 4

4 0
1 2 3 4

Sample Output
You have 2 selection(s) to buy with 3 kind(s) of souvenirs.
Sorry, you can't buy anything.

 

這題可以用01背包,給你n個背包以及它們的重量,再給你背包的總重量m,讓你求取得最大的物品個數是多少,共有幾種方案。之前狀態轉移方程寫錯了錯了好多次,後來改對了。

 

#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
using namespace std;
#define inf 88888888
int w[50],dp[600][2];
int main()
{
	int n,m,i,j,T,num,num1,fas,minx,flag;
	scanf(%d,&T);
	while(T--)
	{
		minx=inf;
		scanf(%d%d,&n,&m);
		for(i=1;i<=n;i++){
			scanf(%d,&w[i]);
			if(w[i]=w[i];j--){
				if(dp[j-w[i]][0]+1>dp[j][0]){
					dp[j][0]=dp[j-w[i]][0]+1;dp[j][1]=dp[j-w[i]][1];
				}
				else if(dp[j-w[i]][0]+1==dp[j][0]){
					dp[j][1]+=dp[j-w[i]][1];
				}
			}
		}
		printf(You have %d selection(s) to buy with %d kind(s) of souvenirs.
,dp[m][1],dp[m][0]);
	}
	return 0; 
}


 

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved