P1441 砝碼稱重 搜尋 dp

2021-08-27 11:48:41 字數 1083 閱讀 6927

你會發現

對於這種很像揹包的dp。。。不打滾動陣列很有可能錯,因為很多時候可能會忘記保留以前狀態的答案,體現在f[i][j] = max(f[i-1][j], f[i][j]);上,因為f[i][j]可能被f[i][b[i]]更新,所以要取max,若想不取max,則必須保證這個狀態只會被更新一次

這題刷錶比填表更好寫,刷表你的初始化只需要讓f[0] = 1 然後用目前的0去更新其他狀態

#include 

#include

#include

#include

#include

using

namespace

std;

#define debug(x) cerr << #x << "=" << x << endl;

const

int maxn = 2005;

const

int mod = 1000000000 + 7;

int n,ans,a[30],m,vis_c[30],vis_w[30],hshtemp[maxn],b[maxn],f[maxn],tot;

int calc()

}memset(f, 0, sizeof(f));

f[0] = 1;

tot = 0;

for(int i=1; i<=n; i++)

tot += a[i];

}/* for(int i=1; i<=now; i++)

}*/for(int i=1; i<=tot; i++)

if(f[i]) sum++;

return sum;

}void dfs_c(int x, int now, int m)

if(now > m || x >= n+1) return;

if(!vis_c[x])

dfs_c(x+1, now, m);

}int main()

dfs_c(1, 0, m);

printf("%d\n", ans);

return

0;}

洛谷P1441 砝碼稱重

現有n個砝碼,重量分別為 aia iai 在去掉 mmm 個砝碼後,問最多能稱量出多少不同的重量 不包括 000 請注意,砝碼只能放在其中一邊。第 111 行為有兩個整數 nnn 和 mmm,用空格分隔。第 222 行有 nnn 個正整數 a1,a2,a3,ana 1,a 2,a 3,ldots a...

P1441 砝碼稱重 搜尋 01揹包

現有n個砝碼,重量分別為 a iai 在去掉 mm 個砝碼後,問最多能稱量出多少不同的重量 不包括 00 請注意,砝碼只能放在其中一邊。第 11 行為有兩個整數 nn 和 mm,用空格分隔。第 22 行有 nn 個正整數 a 1,a 2,a 3,ldots a na1 a2 a3 an 表示每個砝碼...

洛谷 P1441 砝碼稱重(深搜 DP)

傳送門 題目描述 現有n個砝碼,重量分別為a1,a2,a3,an,在去掉m個砝碼後,問最多能稱量出多少不同的重量 不包括0 輸入輸出格式 輸入格式 輸入檔案weight.in的第1行為有兩個整數n和m,用空格分隔 第2行有n個正整數a1,a2,a3,an,表示每個砝碼的重量。輸出格式 輸出檔案wei...