2 900 250
0 50
#include<iostream> #include<cstdlib> #include<cstdio> #include<cmath> #include<cstring> #include<string> #include<cstdlib> #include<algorithm> typedef long long LL; using namespace std; int main(){ int i,j,m,n; int a[3]={150,200,350}; int dp[10001]; cin>>n; while(n--){ memset(dp,0,sizeof(dp)); cin>>m; for(i=0;i<3;i++){ for(j=a[i];j<=m;j++){ dp[j]=max(dp[j],dp[j-a[i]]+a[i]); } } // for(int k=0;k<=m;k++){ // cout<<dp[k]<<" "; // } cout<<m-dp[m]<<endl; } return 0; }
#include<iostream> #include<cstdlib> #include<cstdio> #include<cmath> #include<cstring> #include<string> #include<cstdlib> #include<algorithm> typedef long long LL; using namespace std; int main(){ int t; cin>>t; while(t--) { int temp; cin>>temp; int m1=temp/150; int m2=temp/200; int m3=temp/350; int sum=temp; for(int i=0;i<=m1;++i) for(int j=0;j<=m2;++j) for(int k=0;k<=m3;++k) { int sum1=temp-150*i-200*j-350*k; if(sum1<sum&&sum1>=0) sum=sum1; } cout<<sum<<endl; } return 0; }
BFS:为什么我没有想到呢?(:太弱了。。。
#include<cstdio> #include<cstring> #include<queue> using namespace std; int bfs(int x) { int min=350,t,a[10002]={0}; queue<int> q; q.push(x); while(!q.empty()) { t=q.front(); if(t<min) min=t; q.pop(); x=t-150; if(x>=0&&a[x]==0) { q.push(x); a[x]=1; } x=t-200; if(x>=0&&a[x]==0) { q.push(x); a[x]=1; } x=t-350; if(x>=0&&a[x]==0) { q.push(x); a[x]=1; } } return min; } int main() { int i,j,t,n; scanf("%d",&t); while(t--) { scanf("%d",&n); printf("%d\n",bfs(n)); } return 0; }