正如问题所述,我们给出了一个正整数M和一个非负整数S。我们必须找到长度为M和数字总和S中最小和最大的数字。给定长度和位数,我们必须找到可以制作的最小和最大数量?
限制条件:
(S> = 0和S < = 900)
(M> = 1和M < = 100)
我考虑它和来到结论它必须是动态编程。但是我未能建立DP状态。
这是我想: -
DP [i] [j] =第一个 '我' 有和 'J' 数字
,并设法使program.This是怎么它看起来像
/*
*** PATIENCE ABOVE PERFECTION ***
"When in doubt, use brute force. :D"
-Founder of alloj.wordpress.com
*/
#include<bits/stdc++.h>
using namespace std;
#define pb push_back
#define mp make_pair
#define nline cout<<"\n"
#define fast ios_base::sync_with_stdio(false),cin.tie(0)
#define ull unsigned long long int
#define ll long long int
#define pii pair<int,int>
#define MAXX 100009
#define fr(a,b,i) for(int i=a;i<b;i++)
vector<int>G[MAXX];
int main()
{
int m,s;
cin>>m>>s;
int dp[m+1][s+1];
fr(1,m+1,i)
fr(1,s+1,j)
fr(0,10,k)
dp[i][j]=min(dp[i-1][j-k]+k,dp[i][j]); //Tried for Minimum
cout<<dp[m][s]<<endl;
return 0;
}
请指导我关于这个DP状态以及程序的时间复杂度。这是我第一次尝试DP。
这里阅读更多关于它不需要DP,它的贪心算法 – Herokiller
正是贪婪这里是一个更好的办法,只要找到与这个属性的数量和越来越多的数字或递减排序。 –