日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【u204】高级砝码称重

發(fā)布時(shí)間:2023/12/20 编程问答 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【u204】高级砝码称重 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

Time Limit: 1 second
Memory Limit: 128 MB

【問題描述】

現(xiàn)有n個(gè)砝碼,重量分別為a1,a2,a3,……,an,在去掉m個(gè)砝碼后,問最多能稱量出多少不同的重量(不包括0)。?

【輸入格式】

輸入文件weight.in的第1行為有兩個(gè)整數(shù)n和m,用空格分隔 第2行有n個(gè)正整數(shù)a1,a2,a3,……,an,表示每個(gè)砝碼的重量。

【輸出格式】

輸出文件weight.out僅包括1個(gè)整數(shù),為最多能稱量出的重量。

【數(shù)據(jù)規(guī)?!?/h3>

對于20%的數(shù)據(jù),m=0; 對于50%的數(shù)據(jù),m≤1; 對于50%的數(shù)據(jù),n≤10; 對于100%的數(shù)據(jù),n≤20,m≤4,m<n,ai≤100。

Sample Input1

3 1 1 2 2

Sample Output1

 3

【樣例說明】

在去掉一個(gè)重量為2的砝碼后,能稱量出1,2,3共3種重量。

【題解】

這是一個(gè)0/1背包+搜索的問題。

先選出m個(gè)物品,把他們"去掉“,然后對剩余的物品,進(jìn)行0/1背包就可以了。

ai<=100,n<=20,則枚舉的最大重量為2000;

用一個(gè)boolean型的bo數(shù)組來表示某一個(gè)重量是否能達(dá)到。

if (can[j-w[i]])

can[j] = true;

最后統(tǒng)計(jì)一下重量的種數(shù)就可以了。

【代碼】

#include <cstdio> #include <cstring>int n,m,w[21],ma = 0; bool bo[21],can[2001]; //bo用來表示哪些砝碼可以用,can則表示哪些重量可以由砝碼稱出 void input_data() {scanf("%d%d",&n,&m);for (int i = 1;i <= n;i++)scanf("%d",&w[i]); }void select(int x,int num) //表示當(dāng)前枚舉到了第x個(gè)砝碼,去掉的砝碼數(shù)量為num {if (num == m) //如果去掉的砝碼數(shù)量達(dá)到了要求,則進(jìn)行一次0/1背包,求出能到達(dá)的重量 {memset(can,false,sizeof(can));can[0] = true;for (int i = 1;i <= n;i++)if (bo[i])for (int j= 2000;j>=w[i];j--) //0/1背包是逆序更新的。 if (can[j-w[i]])can[j] = true;int xx = 0;for (int j = 1 ;j <= 2000;j++)if (can[j]) //統(tǒng)計(jì)能夠到達(dá)的重量數(shù)目 xx++;if (xx > ma)ma = xx;return; }for (int i = x+1;i <= n;i++) //從x+1開始表示是一個(gè)組合問題,從n個(gè)中選出m個(gè)。 if (bo[i]){bo[i] = false;select(i,num+1);bo[i] = true; } }void get_ans() {memset(bo,true,sizeof(bo));select(0,0);//從0開始,可以包括m==0的情況。 }void output_ans() {printf("%d\n",ma); }int main() {freopen("stronger.in","r",stdin);freopen("stronger.out","w",stdout);input_data();get_ans();output_ans();fclose(stdin);fclose(stdout);return 0; }

轉(zhuǎn)載于:https://www.cnblogs.com/AWCXV/p/7632341.html

總結(jié)

以上是生活随笔為你收集整理的【u204】高级砝码称重的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。