minhas informações de contato
Correspondência[email protected]
2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
A ideia central da programação dinâmica é decompor o problema em subproblemas menores e armazenar as soluções dos subproblemas para evitar cálculos repetidos
variedadedp[i][j]
significa antes de usari
O peso que pode ser pesado por um peso éj
quantidade
O processo de atualização é o seguinte:
1. Inicialização: dp[0][0] = 0;
2. Para cada peso wi:
- #include<bits/stdc++.h>
- typedef long long ll;
-
- #define IOS ios::sync_with_stdio(0),cin.tie(0),cout.tie(0)
- const ll M=2e5+10;
- const int N=110;
- int dp[N][M]={0};
- using namespace std;
-
- int main()
- {
- IOS;
- int n,num=0;
- cin>>n;
- int w[N];
- ll ans=0;
- for(int i=1;i<=n;i++)
- {
- cin>>w[i];
- num+=w[i];
- }
- dp[0][0]=1;
- for(int i=1;i<=n;i++)
- {
- for(int j=0;j<=num;j++)
- {
- dp[i][j] = dp[i-1][j] + dp[i-1][abs(j-w[i])] + dp[i-1][j+w[i]];
- //cout<<dp[i][j]<<" ";
- }
- //cout<<endl;
- }
-
- for(int i=1;i<=num;i++)
- {
- if(dp[n][i]) ans++;
- }
- cout<<ans;
- return 0;
- }